{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Stimulus-coding, response-coding, or accuracy coding? A complete guide(2-HDDM and pracitice)\n",
        "\n",
        "- Author:: [Wanke Pan](https://github.com/panwanke)\n",
        "- Email:: [panwanke2023@gmail.com](mailto:panwanke2023@gmail.com)\n",
        "- Tags:: [python, hddm, data-analysis, stimulus-coding, response-coding, accuracy-coding]"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "In the [previous article](./stim_coding_1_concept_and_principle.md), we described how to use the different encoding models of DDM (including, correctness encoding, decision encoding and stimulus encoding). In this article, we will describe how to implement different coding models using `HDDM`.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "**Who this post is for**\n",
        "\n",
        "Here’s what I assume you know:\n",
        "- **Readers are familiar with the basic principles of the Diffusion Decision Model (DDM).** This includes an understanding of the drift rate, starting point, and boundary separation parameters, as well as the relationship between these parameters and response accuracy and reaction time.\n",
        "- **The reader has read the previous article to understand the basic concepts of different coding modes, and mathematical expressions.**\n",
        "- **Readers can perform basic model fitting using HDDM.** This includes being able to load data into HDDM, specify the model parameters, and run the model.\n",
        "- **Readers are aware that the decision variable in the DDM can be either accuracy or choice.** In the accuracy task, participants are asked to respond whether a stimulus is present or absent. In the choice task, participants are asked to choose between two or more options."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Before we get started, let's import the toolkit and packages we need. It is noted that we are using [dockerHDDM](https://github.com/hcp4715/dockerHDDM) as our runtime environment. dockerHDDM provides some additional functionality including parallel computation, converting fitting results to arviz, storing the results, calculating log-likelihoods, and so on. If you are not using dockerHDDM, then you can also install our customized [kabuki](https://github.com/panwanke/kabuki) to achieve the same functionality.\n",
        "\n",
        "We print the key package versions so that you can check and reproduce them."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "notebookRunGroups": {
          "groupValue": "1"
        }
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "The current version of kabuki is:  0.6.5RC3\n",
            "The current version of HDDM is:  0.9.8RC\n",
            "The current version of arviz is:  0.15.1\n"
          ]
        }
      ],
      "source": [
        "import warnings\n",
        "\n",
        "warnings.filterwarnings(\"ignore\")\n",
        "\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "import hddm\n",
        "import kabuki\n",
        "import seaborn as sns\n",
        "import arviz as az\n",
        "\n",
        "print(\"The current version of kabuki is: \", kabuki.__version__)\n",
        "print(\"The current version of HDDM is: \", hddm.__version__)\n",
        "print(\"The current version of arviz is: \", az.__version__)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Then, simulated data were generated using the HDDM package. \n",
        "\n",
        "Subsequently, simulated data were generated using the HDDM package, incorporating two experimental conditions: left and right stimulus presentations. \n",
        "- With equivalent difficulty levels for both stimuli, we postulated identical drift rates (v) and decision boundaries (a) across conditions. \n",
        "- However, we assumed a bias towards perceiving the stimulus on the left, resulting in a larger starting point (z) for the left condition. \n",
        "\n",
        "This manipulation allowed us to investigate the impact of initial bias on decision-making behavior within the DDM framework.\n",
        "\n",
        "The simulation parameters were set as follows:\n",
        "\n",
        "- Number of subjects: 1\n",
        "- Trials per level: 500\n",
        "- Drift rate (a): 1.5\n",
        "- Non-decision time (t): 0.4\n",
        "- Boundary separation (z): 0.6 (for left stimulus) and 0.4 (for right stimulus)\n",
        "- Standard deviation of the drift rate (sv), standard deviation of the non-decision time (st) and standard deviation of the boundary separation (sz) were not considered. \n",
        "\n",
        "The `hddm.generate.gen_rand_data()` function was then used to generate simulated data from the two dataframes. The function was called with the following arguments:\n",
        "\n",
        "- `dataframes`: a dictionary containing the two dataframes\n",
        "- `size`: the number of trials to generate\n",
        "- `subjs`: the number of subjects to generate data for"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "notebookRunGroups": {
          "groupValue": "1"
        }
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>rt</th>\n",
              "      <th>response</th>\n",
              "      <th>subj_idx</th>\n",
              "      <th>stimulus</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.639</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.526</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0.785</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0.892</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0.630</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "      rt  response  subj_idx stimulus\n",
              "0  0.639       1.0         0     left\n",
              "1  0.526       1.0         0     left\n",
              "2  0.785       1.0         0     left\n",
              "3  0.892       1.0         0     left\n",
              "4  0.630       1.0         0     left"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# simulated data\n",
        "n_subjects = 1\n",
        "trials_per_level = 1000\n",
        "a = 1.5\n",
        "v = 1\n",
        "t = 0.4\n",
        "z_1 = 0.6\n",
        "z_2 = 0.4\n",
        "\n",
        "# only consider the stimulus effect on z\n",
        "df_stim_left = {\"v\": v, \"a\": a, \"t\": t, \"sv\": 0, \"z\": z_1, \"sz\": 0, \"st\": 0}\n",
        "df_stim_right = {\"v\": v, \"a\": a, \"t\": t, \"sv\": 0, \"z\": z_2, \"sz\": 0, \"st\": 0}\n",
        "\n",
        "# combine dataframe\n",
        "data, params = hddm.generate.gen_rand_data(\n",
        "    {\n",
        "        \"left\": df_stim_left,\n",
        "        \"right\": df_stim_right\n",
        "    },\n",
        "    size=trials_per_level,\n",
        "    subjs=n_subjects,\n",
        ")\n",
        "data.rename(columns={'condition': 'stimulus'}, inplace=True)\n",
        "\n",
        "data.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "From the visualized results, it is evident that despite the only difference between the two stimuli being the z parameter, there are notable variations in both accuracy and reaction time (RT) distributions.\n",
        "- The leftward bias is associated with a higher accuracy rate under the left condition, correspondingly accompanied by a lower accuracy rate under the right condition. \n",
        "- The RT distribution reveals that in the left condition, correct responses are faster and more concentrated (exhibiting greater skewness)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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AAAmBKQbqH///nrqqadq3H/Lli36zW9+I0dHx1rtBwBAQ2WxWLRly5Ya99+xY4csFovOnj1bbzVVhYDUgD3++OMaPny4jh07pmXLlmn8+PEaOnSovcsCAOCa5ebmatCgQXU65pIlS9SlS5c6HZMnaTdQ58+f16lTpxQVFaWgoCB7lwMAwHUrLS1VYGCgvcuoEWaQ7KSkpERPP/20WrVqJXd3d0VERGjHjh2Sfp5O9PT0lCTde++9slgs6t+/v15//XW98847slgsslgs1v4AADRE/fv314wZM/TUU0/Jz89PUVFRlS6xff755+rSpYtcXFzUrVs3bdmyRRaLRfv27bMZKysrS926dZObm5t69eql7OxsSdL69eu1dOlSffPNN9bvx/Xr11937cwg2cmMGTP07bffKi0tTUFBQXr77bc1cOBA/eMf/7D+w4eGhuqtt95Sr1695ObmpilTpqioqEjJycmSJB8fHzufBQAAV/b666/riSee0N///ndJ0m233WbdVlRUpOjoaA0ePFipqan68ccfq11zO3/+fL3wwgvy9/fXtGnTNHHiRP3973/XqFGjdODAAW3btk0fffSRpJr91trVEJDsICcnR8nJycrJybFePnv66ae1bds2JScna8WKFWrRooWkn0PQ5elIV1dXlZSUNJrpSQAAbrnlFq1cubLKbampqbJYLHrttdfk4uKijh076sSJE5oyZUqlvsuXL9fdd98tSZo7d66GDBmiixcvytXVVR4eHmrSpEmdfj8SkOzgH//4h8rLy3XrrbfatJeUlMjX19dOVQEAUPfCw8Or3Zadna1OnTrJxcXF2ta9e/cq+3bq1Mn6d8uWLSVJp06dUps2beqoUlsEJDs4f/68HB0dlZWVJUdHR5ttHh4edqoKAIC65+7uXifjNG3a1Pq3xWKRJFVUVNTJ2FUhINlB165dVV5erlOnTqlv37413s/JyUnl5eX1WBkAADdOaGioNmzYoJKSEusP03755Ze1Hqc+vh+5i80Obr31Vo0dO1axsbFKT0/X999/rz179ighIUFbt26tdr+QkBDt379f2dnZKigoUFlZ2Q2sGgCAujVmzBhVVFRo6tSpOnjwoP72t7/p+eefl/SfWaKaCAkJ0ffff699+/apoKBAJSUl110bAclOkpOTFRsbq//3//6fQkNDNXToUH355ZdXvJY6ZcoUhYaGqlu3bvL397feEQAAQGPk5eWl9957T/v27VOXLl00f/58LVq0SJJs1iVdTUxMjAYOHKh77rlH/v7+evPNN6+7NothGMZ1jwIAAFAHUlJSNGHCBBUWFsrV1dVudbAGCQAA2M0bb7yh9u3bq1WrVvrmm280Z84cjRw50q7hSCIgAQAAO8rLy9OiRYuUl5enli1basSIEVq+fLm9y+ISGwAAgBmLtAEAAEwISAAAACYEJAAAABMCEgAAgAkBCcBNa8mSJerSpUu9H2f9+vVq1qxZvR8HwI1DQALQKJw+fVpPPPGE2rRpI2dnZwUGBioqKsr6RHmLxaItW7bY7PP0008rIyPDDtUCaOx4DhKARiEmJkalpaV6/fXX1b59e+Xn5ysjI0Nnzpypdh8PDw95eHjcwCoB3CyYQQLQ4J09e1a7du3S73//e91zzz1q27atunfvrvj4eD344IMKCQmRJD388MOyWCzW9+ZLbOPHj9fQoUO1YsUKBQQEqFmzZnrmmWd06dIl/e53v5OPj49at26t5ORk6z47duyQxWLR2bNnrW379u2TxWLRDz/8UGW9l4/zS0899ZT69+9vfb9582aFhYXJ1dVVvr6+ioyMVHFx8XV8SgDqEgEJQIN3eSZoy5YtVf5K95dffinp5x+Bzs3Ntb6vyscff6yTJ09q586dSkxM1OLFi/XAAw+oefPm2r17t6ZNm6bHH39cx48fr7fzyc3N1ejRozVx4kQdPHhQO3bs0LBhw8Rze4GGg4AEoMFr0qSJ1q9fr9dff13NmjVT7969NW/ePO3fv1+S5O/vL0lq1qyZAgMDre+r4uPjoz/84Q8KDQ3VxIkTFRoaqgsXLmjevHm65ZZbFB8fLycnJ3322Wf1dj65ubm6dOmShg0bppCQEIWFhem//uu/uBwINCAEJACNQkxMjE6ePKl3331XAwcO1I4dO3TnnXdq/fr1tRrnt7/9rRwc/vN/fQEBAQoLC7O+d3R0lK+vr06dOlVXpVfSuXNn3XfffQoLC9OIESP02muv6V//+le9HQ9A7RGQADQaLi4uGjBggBYuXKjPP/9c48eP1+LFi2s1RtOmTW3eWyyWKtsqKiokyRqmfnn5q6ys7IrHcHBwqHS57Jf7ODo6avv27frrX/+qjh076uWXX1ZoaKi+//77Wp0LgPpDQALQaHXs2NG6sLlp06YqLy+v82NcvlyXm5trbdu3b99V9/ll/6r2sVgs6t27t5YuXaqvv/5aTk5Oevvtt+ukZgDXj4AEoME7c+aM7r33Xm3YsEH79+/X999/r02bNmnlypV66KGHJEkhISHKyMhQXl5enV6u+s1vfqPg4GAtWbJE3333nbZu3aoXXnjhivvce++9+uqrr/TGG2/ou+++0+LFi3XgwAHr9t27d2vFihX66quvlJOTo/T0dJ0+fVq33357ndUN4PoQkAA0eB4eHoqIiNCLL76ofv366Y477tDChQs1ZcoUvfLKK5KkF154Qdu3b1dwcLC6du1aZ8du2rSp3nzzTR06dEidOnXS73//e/3P//zPFfeJiorSwoUL9d///d+66667dO7cOcXGxlq3e3l5aefOnRo8eLBuvfVWLViwQC+88IIGDRpUZ3UDuD4Wg/tKAQAAbDCDBAAAYEJAAgAAMCEgAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYEJAAAABM/j9uAIG1pTbCQAAAAABJRU5ErkJggg==",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "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BJzLli3zdSg+kZ+f7zzvvPOcixYtcl5xxRXOhx56yNchNUjnSluhdqJ6aifUTjRWqnw2QLm5uURHR/s6DI8rKytj3bp1DBw40LXNbDYzcOBAVq1a5cPIfC83NxfgnPh3UJ3x48czbNiwKv825FTnQluhduL01E6onWismswi803Fzp07mT59Oi+++KKvQ/G4w4cPY7fbT7kSVXx8PNu2bfNRVL7ncDiYMGECl1xyCRdccIGvw/G6jz/+mJ9++om1a9f6OpQG7VxpK9ROVE/thNqJxkyVTw/54x//iMlkqvF2csN54MABhgwZwo033si4ceN8FLn42vjx49m0aRMff/yxr0Pxun379vHQQw/x4YcfEhgY6OtwvEJthdSH2olzq51oanSFIw85dOgQR44cqXGfdu3aYbVaATh48CD9+vXjoosuYvbs2ZjNTf/vgrKyMoKDg/n0008ZMWKEa/vo0aPJyclh3rx5vgvOR1JTU5k3bx7Lly+nbdu2vg7H6+bOnct1112HxWJxbbPb7ZhMJsxmM6WlpVVeawrUVtRM7cSp1E6ce+1EU6Nudw+JjY0lNja2VvseOHCAK6+8kp49ezJr1qwm/2NSyWq10rNnTxYvXuz6UXE4HCxevJjU1FTfBudlTqeTBx54gM8//5ylS5eekz8oAAMGDGDjxo1Vtt15552cf/75PP74403yB0VtRc3UThyndsJwLrYTTY2STx87cOAA/fr1o3Xr1rz44oscOnTI9VpCQoIPI/OOiRMnMnr0aHr16kWfPn149dVXKSws5M477/R1aF41fvx45syZw7x58wgLCyMzMxOAiIgIgoKCfByd94SFhZ0yfi0kJISYmJhzclzbic7ltkLthEHthEHtROOn5NPHFi1axM6dO9m5cyctW7as8tq5MCLi5ptv5tChQ0yePJnMzEy6d+/OggULTplc0NS9+eabAPTr16/K9lmzZjFmzBjvByQNzrncVqidMKidkKZCYz5FRERExGua/oAhEREREWkwlHyKiIiIiNco+RQRERERr1HyKSIiIiJeo+RTRERERLxGyaeIiIiIeI2STxERERHxGiWfIiIiIuI1Sj6lWmPGjHFdR/lMli5dislkIicnx6MxVerXrx8TJkxwPW/Tpg2vvvqq289z8ndw8nk9eS6RxkDthNoJkfrQ5TWlWq+99lqtL9l38cUXk5GRQURERK2PP2bMGHJycpg7d249Izxu7dq1hISE1GrfNm3aMGHChFr9ONTlO6itPXv20LZtW37++We6d+/u0XOJeJraCbUTIvWh5FOqVZcfCKvVSkJCggejqVlsbKxbj2e32zGZTHX6Ds6WN88l4i5qJ9ROiNSHut2lWid275SWlvLggw8SFxdHYGAgl156KWvXrnXte3J32uzZs4mMjGThwoV06tSJ0NBQhgwZQkZGBgBTpkzhvffeY968eZhMJkwmE0uXLq02jsLCQkaNGkVoaCiJiYm89NJLp+xzYnea0+lkypQptGrVioCAAJo3b86DDz4IGN1he/fu5eGHH3ad98R4v/jiCzp37kxAQADp6enVdnHZbDZSU1OJiIigWbNm/PnPf65SiTCZTKdUaSIjI5k9ezYAbdu2BaBHjx6YTCb69et3yvddl+988eLF9OrVi+DgYC6++GLS0tKq/R5FPEHthNoJkfpQ8iln9Ic//IH//Oc/vPfee/z000906NCBwYMHc/To0dO+p6ioiBdffJF//vOfLF++nPT0dB599FEAHn30UW666SbXD01GRgYXX3xxtcd57LHHWLZsGfPmzePbb79l6dKl/PTTT6c973/+8x9eeeUV3nrrLXbs2MHcuXPp2rUrAJ999hktW7Zk6tSprvOeGO9f//pX3nnnHTZv3kxcXFy1x3/vvffw8/NjzZo1vPbaa7z88su88847Z/wOK61ZswaA7777joyMDD777LNq96vtd/7EE0/w0ksv8eOPP+Ln58ddd91V61hE3EntxHFqJ0Rqpm53qVFhYSFvvvkms2fPZujQoQD8/e9/Z9GiRbz77rs89thj1b6vvLycmTNn0r59ewBSU1OZOnUqAKGhoQQFBVFaWlpjN1xBQQHvvvsuH3zwAQMGDACMRr1ly5anfU96ejoJCQkMHDgQf39/WrVqRZ8+fQCIjo7GYrEQFhZ2ynnLy8t54403uPDCC2v8PpKSknjllVcwmUwkJyezceNGXnnlFcaNG1fj+ypVdv3FxMSc9rPX5Tt/7rnnuOKKKwD44x//yLBhwygpKSEwMLBW8Yi4g9qJqtROiNRMlU+p0a5duygvL+eSSy5xbfP396dPnz5s3br1tO8LDg52/aAAJCYmkp2dXedzl5WV0bdvX9e26OhokpOTT/ueG2+8keLiYtq1a8e4ceP4/PPPsdlsZzyX1WqlW7duZ9zvoosucnXDAaSkpLBjxw7sdvsZ31tbdfnOT4w5MTERoM7fs8jZUjtRldoJkZop+RSP8Pf3r/LcZDJ5ZZZmUlISaWlpvPHGGwQFBfH73/+eyy+/nPLy8hrfFxQUVOXHor6q+5xnOvfZOPF7rozf4XB47Hwi7qR24ji1E3IuUfIpNWrfvj1Wq5UVK1a4tpWXl7N27Vo6d+5c7+NardYzVgHat2+Pv78/q1evdm07duwY27dvr/F9QUFBDB8+nL/97W8sXbqUVatWsXHjxlqftyYnxgLwww8/cN5552GxWACju+zEMWI7duygqKjI9dxqtQLUGIOnvnMRT1E7UZXaCZGaacyn1CgkJIT777+fxx57jOjoaFq1asXzzz9PUVERY8eOrfdx27Rpw8KFC0lLSyMmJoaIiIhTqiChoaGMHTuWxx57jJiYGOLi4njiiScwm0//N9Ps2bOx2+307duX4OBgPvjgA4KCgmjdurXrvMuXL+eWW24hICCAZs2a1Snu9PR0Jk6cyL333stPP/3E9OnTq8ys7d+/P6+//jopKSnY7XYef/zxKp8rLi6OoKAgFixYQMuWLQkMDDxl+RRPfecinqJ2oiq1EyI1U/IpZ/SXv/wFh8PBHXfcQX5+Pr169WLhwoVERUXV+5jjxo1j6dKl9OrVi4KCApYsWeJaTuREL7zwAgUFBQwfPpywsDAeeeQRcnNzT3vcyMhI/vKXvzBx4kTsdjtdu3blyy+/JCYmBoCpU6dy77330r59e0pLS+vcxTdq1CiKi4vp06cPFouFhx56iHvuucf1+ksvvcSdd97JZZddRvPmzXnttddYt26d63U/Pz/+9re/MXXqVCZPnsxll11W7fIxnvjORTxJ7cRxaidEamZy6nIJUo1bb70Vi8XCBx984OtQRKSBUjshIvWhMZ9Shc1mY8uWLaxatYouXbr4OhwRaYDUTojI2VDyKVVs2rSJXr160aVLF+677z5fhyMiDZDaCRE5G+p2FxERERGvUeVTRERERLxGyaeIiIiIeI2STxERERHxGiWfIiIiIuI1Sj5FRERExGuUfIqIiIiI1yj5FBERERGvUfIpIiIiIl6j5FNEREREvOb/AXb+/lP/iNPPAAAAAElFTkSuQmCC",
            "text/plain": [
              "<Figure size 682.75x300 with 2 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "# First chart: Point range plot for accuracy\n",
        "stimulus_groups = data.groupby('stimulus')\n",
        "mean = stimulus_groups['response'].mean()\n",
        "std_dev = stimulus_groups['response'].std()\n",
        "# Calculate the confidence interval using the standard deviation\n",
        "# For a 95% confidence level, which is common, we use 1.96 times the standard deviation\n",
        "# This assumes the data follows a normal distribution\n",
        "n = stimulus_groups.size()\n",
        "ci_width = 1.96 * (std_dev / np.sqrt(n))\n",
        "cis_lower = mean - ci_width\n",
        "cis_upper = mean + ci_width\n",
        "# Plotting\n",
        "plt.errorbar(mean.index,\n",
        "             mean,\n",
        "             yerr=[mean - cis_lower, cis_upper - mean],\n",
        "             fmt='o',\n",
        "             color='black')\n",
        "plt.xlabel('Stimulus')\n",
        "plt.ylabel('Accuracy')\n",
        "plt.title('Accuracy by Stimulus')\n",
        "plt.show()\n",
        "# Second chart: Histogram of the product of reaction time (rt) and response\n",
        "data['joint distribution'] = data['rt'] * (2 * data['response'].astype(int) - 1)\n",
        "# Use Seaborn's FacetGrid to create a multi-panel histogram\n",
        "g = sns.FacetGrid(data, col=\"stimulus\", hue=\"stimulus\")\n",
        "g.map(sns.histplot, \"joint distribution\", kde=True, bins=30)\n",
        "g.add_legend()\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Basic model\n",
        "\n",
        "To establish a baseline for comparison, we first constructed a basic model incorporating four fundamental parameters, devoid of any condition-specific influences. \n",
        "\n",
        "The mathematical expression of this model is as follows:\n",
        "\n",
        "$$\n",
        "\\begin{align*}\n",
        "rt,choice=1&\\sim \\text{WFPT}(v,a,t,z) \\\\\n",
        "rt,choice=0&\\sim \\text{WFPT}(-v,a,t,1-z) \\\\\n",
        "\\end{align*}\n",
        "$$"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {},
      "outputs": [],
      "source": [
        "m0 = hddm.HDDM(data, include=['v', 'a', 't', 'z'])\n",
        "m0_infdata = m0.sample(2000,\n",
        "                       burn=1000,\n",
        "                       chains=4,\n",
        "                       return_infdata=True,\n",
        "                       save_name=\"m0\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Accuracy Coding model\n",
        "\n",
        "In the second model, we introduce a condition-specific parameter, denoted as `stimulus`. We refer to this model as the accuracy coding model since its response variable is accuracy in relation to the choice or stimulus, as will be further elaborated in subsequent models.\n",
        "\n",
        "Establishing this model is significant as it allows us to conduct parameter recovery analyses. By comparing the fit parameters with the true parameters, we can assess the model’s ability to accurately estimate the underlying decision-making processes. This evaluation is crucial for validating the model’s fidelity and its applicability in various experimental contexts."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "No model attribute --> setting up standard HDDM\n",
            "Set model to ddm\n",
            "hddm sampling elpased time:  16.679 s\n",
            "Start converting to InferenceData...\n"
          ]
        }
      ],
      "source": [
        "m1_acc = hddm.HDDM(data,\n",
        "                   depends_on={\n",
        "                       'a': 'stimulus',\n",
        "                       'v': 'stimulus',\n",
        "                       't': 'stimulus',\n",
        "                       'z': 'stimulus'\n",
        "                   },\n",
        "                   include=['v', 'a', 't', 'z'])\n",
        "m1_acc_infdata = m1_acc.sample(2000,\n",
        "                               burn=1000,\n",
        "                               chains=4,\n",
        "                               return_infdata=True,\n",
        "                               save_name=\"m1_acc\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "The parameter estimates from our results indicate a close alignment with the true parameter values. \n",
        "\n",
        "As a reminder, the true parameters were set as follows: \n",
        "- For stimulues \"left\",  a (decision boundary) = 1.5, v (drift rate) = 1, t (non-decision time) = 0.4, z (starting point for upper choice) = 0.6, that means it has a tendency to correct or left choice.\n",
        "- For stimulues \"right\", a = 1.5, v (drift rate) = 1, t = 0.4, z = 0.4, that means it has a tendency to error or left choice.\n",
        "\n",
        "The proximity of the fitted parameters to these true values suggests that our model is capable of reliable parameter recovery, reinforcing its validity for modeling decision-making processes under different conditions."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>mean</th>\n",
              "      <th>sd</th>\n",
              "      <th>hdi_3%</th>\n",
              "      <th>hdi_97%</th>\n",
              "      <th>mcse_mean</th>\n",
              "      <th>mcse_sd</th>\n",
              "      <th>ess_bulk</th>\n",
              "      <th>ess_tail</th>\n",
              "      <th>r_hat</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>a(left)</th>\n",
              "      <td>1.422</td>\n",
              "      <td>0.038</td>\n",
              "      <td>1.349</td>\n",
              "      <td>1.491</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.001</td>\n",
              "      <td>1607.0</td>\n",
              "      <td>2140.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>a(right)</th>\n",
              "      <td>1.482</td>\n",
              "      <td>0.033</td>\n",
              "      <td>1.416</td>\n",
              "      <td>1.541</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.001</td>\n",
              "      <td>1999.0</td>\n",
              "      <td>2531.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>v(left)</th>\n",
              "      <td>1.143</td>\n",
              "      <td>0.104</td>\n",
              "      <td>0.944</td>\n",
              "      <td>1.328</td>\n",
              "      <td>0.003</td>\n",
              "      <td>0.002</td>\n",
              "      <td>901.0</td>\n",
              "      <td>1444.0</td>\n",
              "      <td>1.01</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>v(right)</th>\n",
              "      <td>1.015</td>\n",
              "      <td>0.085</td>\n",
              "      <td>0.860</td>\n",
              "      <td>1.177</td>\n",
              "      <td>0.002</td>\n",
              "      <td>0.002</td>\n",
              "      <td>1601.0</td>\n",
              "      <td>2327.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>t(left)</th>\n",
              "      <td>0.400</td>\n",
              "      <td>0.006</td>\n",
              "      <td>0.390</td>\n",
              "      <td>0.411</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>801.0</td>\n",
              "      <td>1401.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>t(right)</th>\n",
              "      <td>0.399</td>\n",
              "      <td>0.006</td>\n",
              "      <td>0.388</td>\n",
              "      <td>0.411</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>2158.0</td>\n",
              "      <td>2420.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z(left)</th>\n",
              "      <td>0.579</td>\n",
              "      <td>0.019</td>\n",
              "      <td>0.545</td>\n",
              "      <td>0.617</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.001</td>\n",
              "      <td>675.0</td>\n",
              "      <td>1328.0</td>\n",
              "      <td>1.01</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z(right)</th>\n",
              "      <td>0.390</td>\n",
              "      <td>0.015</td>\n",
              "      <td>0.363</td>\n",
              "      <td>0.420</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>1698.0</td>\n",
              "      <td>2107.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "           mean     sd  hdi_3%  hdi_97%  mcse_mean  mcse_sd  ess_bulk   \n",
              "a(left)   1.422  0.038   1.349    1.491      0.001    0.001    1607.0  \\\n",
              "a(right)  1.482  0.033   1.416    1.541      0.001    0.001    1999.0   \n",
              "v(left)   1.143  0.104   0.944    1.328      0.003    0.002     901.0   \n",
              "v(right)  1.015  0.085   0.860    1.177      0.002    0.002    1601.0   \n",
              "t(left)   0.400  0.006   0.390    0.411      0.000    0.000     801.0   \n",
              "t(right)  0.399  0.006   0.388    0.411      0.000    0.000    2158.0   \n",
              "z(left)   0.579  0.019   0.545    0.617      0.001    0.001     675.0   \n",
              "z(right)  0.390  0.015   0.363    0.420      0.000    0.000    1698.0   \n",
              "\n",
              "          ess_tail  r_hat  \n",
              "a(left)     2140.0   1.00  \n",
              "a(right)    2531.0   1.00  \n",
              "v(left)     1444.0   1.01  \n",
              "v(right)    2327.0   1.00  \n",
              "t(left)     1401.0   1.00  \n",
              "t(right)    2420.0   1.00  \n",
              "z(left)     1328.0   1.01  \n",
              "z(right)    2107.0   1.00  "
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "az.summary(m1_acc_infdata)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Choice coding model\n",
        "\n",
        "In the choice coding model, we diverge from the accuracy coding approach by assuming that the response variable is the choice made (“left” or “right”), rather than the accuracy of the response (“correct” or “error”). \n",
        "- Since the variable ‘choice’ does not exist inherently, we compute it based on the stimulus presented and the accuracy rate. \n",
        "- Additionally, we encode the stimulus as ‘stim_code’ for computational convenience, with ‘left’ being assigned a value of 1 and ‘right’ a value of 0. "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "notebookRunGroups": {
          "groupValue": "1"
        }
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>rt</th>\n",
              "      <th>response</th>\n",
              "      <th>subj_idx</th>\n",
              "      <th>stimulus</th>\n",
              "      <th>accuracy</th>\n",
              "      <th>stim_code</th>\n",
              "      <th>choice</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.639</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.526</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0.785</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0.892</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0.630</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "      <td>1.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "      rt  response  subj_idx stimulus  accuracy  stim_code  choice\n",
              "0  0.639       1.0         0     left       1.0          1       1\n",
              "1  0.526       1.0         0     left       1.0          1       1\n",
              "2  0.785       1.0         0     left       1.0          1       1\n",
              "3  0.892       1.0         0     left       1.0          1       1\n",
              "4  0.630       1.0         0     left       1.0          1       1"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "data['accuracy'] = data['response']\n",
        "# recode left = 1, right to 0\n",
        "data['stim_code'] = data['stimulus'].replace({'left': 1, 'right': 0})\n",
        "# left~choice=1;right~choice=0\n",
        "data['choice'] = np.where(data['stim_code'] == data['accuracy'], 1, 0)\n",
        "\n",
        "data.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "No model attribute --> setting up standard HDDM\n",
            "Set model to ddm\n",
            "hddm sampling elpased time:  16.586 s\n",
            "Start converting to InferenceData...\n"
          ]
        }
      ],
      "source": [
        "# using choice coding\n",
        "data['response'] = data['choice']\n",
        "\n",
        "m1_choice = hddm.HDDM(data,\n",
        "                      depends_on={\n",
        "                          'a': 'stimulus',\n",
        "                          'v': 'stimulus',\n",
        "                          't': 'stimulus',\n",
        "                          'z': 'stimulus'\n",
        "                      },\n",
        "                      include=['v', 'a', 't', 'z'])\n",
        "m1_choice_infdata = m1_choice.sample(2000,\n",
        "                                     burn=1000,\n",
        "                                     chains=4,\n",
        "                                     return_infdata=True,\n",
        "                                     save_name=\"m1_choice\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "As you can see, for choice coding, we get different parameter values, but these have the same interpretation.\n",
        "- For stimulues \"left\", v ≈ 1, z ≈ 0.6, that means it has a tendency to the left choice.\n",
        "- For stimulues \"right\", v ≈ -1, z ≈ 0.6. **Considering that the upper boundary is left, a negative v indicates that most of the decisions are to the right. However, a positive z indicates a response bias with decisions being to the left.**\n",
        "\n",
        "Relative to accuracy coding, at this point, the z parameter in both conditions has consistent values and interpreted meanings in choice coding."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>mean</th>\n",
              "      <th>sd</th>\n",
              "      <th>hdi_3%</th>\n",
              "      <th>hdi_97%</th>\n",
              "      <th>mcse_mean</th>\n",
              "      <th>mcse_sd</th>\n",
              "      <th>ess_bulk</th>\n",
              "      <th>ess_tail</th>\n",
              "      <th>r_hat</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>a(left)</th>\n",
              "      <td>1.422</td>\n",
              "      <td>0.037</td>\n",
              "      <td>1.350</td>\n",
              "      <td>1.490</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.001</td>\n",
              "      <td>1873.0</td>\n",
              "      <td>1952.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>a(right)</th>\n",
              "      <td>1.482</td>\n",
              "      <td>0.033</td>\n",
              "      <td>1.422</td>\n",
              "      <td>1.545</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.001</td>\n",
              "      <td>1872.0</td>\n",
              "      <td>2384.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>v(left)</th>\n",
              "      <td>1.139</td>\n",
              "      <td>0.105</td>\n",
              "      <td>0.944</td>\n",
              "      <td>1.332</td>\n",
              "      <td>0.003</td>\n",
              "      <td>0.002</td>\n",
              "      <td>1208.0</td>\n",
              "      <td>1957.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>v(right)</th>\n",
              "      <td>-1.018</td>\n",
              "      <td>0.084</td>\n",
              "      <td>-1.171</td>\n",
              "      <td>-0.860</td>\n",
              "      <td>0.002</td>\n",
              "      <td>0.001</td>\n",
              "      <td>1811.0</td>\n",
              "      <td>2285.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>t(left)</th>\n",
              "      <td>0.400</td>\n",
              "      <td>0.006</td>\n",
              "      <td>0.390</td>\n",
              "      <td>0.411</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>923.0</td>\n",
              "      <td>1567.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>t(right)</th>\n",
              "      <td>0.400</td>\n",
              "      <td>0.006</td>\n",
              "      <td>0.388</td>\n",
              "      <td>0.411</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>2022.0</td>\n",
              "      <td>2600.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z(left)</th>\n",
              "      <td>0.580</td>\n",
              "      <td>0.020</td>\n",
              "      <td>0.545</td>\n",
              "      <td>0.618</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.000</td>\n",
              "      <td>914.0</td>\n",
              "      <td>1618.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z(right)</th>\n",
              "      <td>0.611</td>\n",
              "      <td>0.015</td>\n",
              "      <td>0.581</td>\n",
              "      <td>0.638</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>2015.0</td>\n",
              "      <td>2738.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "           mean     sd  hdi_3%  hdi_97%  mcse_mean  mcse_sd  ess_bulk   \n",
              "a(left)   1.422  0.037   1.350    1.490      0.001    0.001    1873.0  \\\n",
              "a(right)  1.482  0.033   1.422    1.545      0.001    0.001    1872.0   \n",
              "v(left)   1.139  0.105   0.944    1.332      0.003    0.002    1208.0   \n",
              "v(right) -1.018  0.084  -1.171   -0.860      0.002    0.001    1811.0   \n",
              "t(left)   0.400  0.006   0.390    0.411      0.000    0.000     923.0   \n",
              "t(right)  0.400  0.006   0.388    0.411      0.000    0.000    2022.0   \n",
              "z(left)   0.580  0.020   0.545    0.618      0.001    0.000     914.0   \n",
              "z(right)  0.611  0.015   0.581    0.638      0.000    0.000    2015.0   \n",
              "\n",
              "          ess_tail  r_hat  \n",
              "a(left)     1952.0    1.0  \n",
              "a(right)    2384.0    1.0  \n",
              "v(left)     1957.0    1.0  \n",
              "v(right)    2285.0    1.0  \n",
              "t(left)     1567.0    1.0  \n",
              "t(right)    2600.0    1.0  \n",
              "z(left)     1618.0    1.0  \n",
              "z(right)    2738.0    1.0  "
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "az.summary(m1_choice_infdata)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Start point z and Stim Coding Type1\n",
        "\n",
        "\n",
        "In our simulated data, since the values of all parameters except the z are the same for both conditions. \n",
        "\n",
        "Therefore. We can simplify the two previous models, `m1_acc` and `m1_choice`, i.e., consider only the parameter z changing with the stimulus, while keeping the other parameters constant, corresponding to `m2_acc` and `m2_choice`.\n",
        "\n",
        "> In practical modelling, we also recommend that you build a full model (with all parameters and experimental manipulations) first, and then merge those unnecessary parameters and experimental manipulations to simplify the model."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "`m2_acc` is very close to the previous results of `m1_acc` and will not be repeated here."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "No model attribute --> setting up standard HDDM\n",
            "Set model to ddm\n",
            "hddm sampling elpased time:  16.862 s\n",
            "Start converting to InferenceData...\n"
          ]
        }
      ],
      "source": [
        "# using accuracy coding\n",
        "data['response'] = data['accuracy']\n",
        "\n",
        "m2_acc = hddm.HDDM(data, depends_on={'z': 'stimulus'}, include=['v', 'a', 't', 'z'])\n",
        "m2_acc_infdata = m2_acc.sample(2000,\n",
        "                               burn=1000,\n",
        "                               chains=4,\n",
        "                               return_infdata=True,\n",
        "                               save_name=\"m2_acc\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>mean</th>\n",
              "      <th>sd</th>\n",
              "      <th>hdi_3%</th>\n",
              "      <th>hdi_97%</th>\n",
              "      <th>mcse_mean</th>\n",
              "      <th>mcse_sd</th>\n",
              "      <th>ess_bulk</th>\n",
              "      <th>ess_tail</th>\n",
              "      <th>r_hat</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>a</th>\n",
              "      <td>1.456</td>\n",
              "      <td>0.025</td>\n",
              "      <td>1.410</td>\n",
              "      <td>1.502</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.000</td>\n",
              "      <td>1787.0</td>\n",
              "      <td>2383.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>v</th>\n",
              "      <td>1.057</td>\n",
              "      <td>0.062</td>\n",
              "      <td>0.939</td>\n",
              "      <td>1.172</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.001</td>\n",
              "      <td>1922.0</td>\n",
              "      <td>2661.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>t</th>\n",
              "      <td>0.402</td>\n",
              "      <td>0.004</td>\n",
              "      <td>0.395</td>\n",
              "      <td>0.409</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>1513.0</td>\n",
              "      <td>2149.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z(left)</th>\n",
              "      <td>0.597</td>\n",
              "      <td>0.014</td>\n",
              "      <td>0.571</td>\n",
              "      <td>0.624</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>1802.0</td>\n",
              "      <td>2324.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z(right)</th>\n",
              "      <td>0.384</td>\n",
              "      <td>0.014</td>\n",
              "      <td>0.358</td>\n",
              "      <td>0.409</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>2421.0</td>\n",
              "      <td>2995.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "           mean     sd  hdi_3%  hdi_97%  mcse_mean  mcse_sd  ess_bulk   \n",
              "a         1.456  0.025   1.410    1.502      0.001    0.000    1787.0  \\\n",
              "v         1.057  0.062   0.939    1.172      0.001    0.001    1922.0   \n",
              "t         0.402  0.004   0.395    0.409      0.000    0.000    1513.0   \n",
              "z(left)   0.597  0.014   0.571    0.624      0.000    0.000    1802.0   \n",
              "z(right)  0.384  0.014   0.358    0.409      0.000    0.000    2421.0   \n",
              "\n",
              "          ess_tail  r_hat  \n",
              "a           2383.0    1.0  \n",
              "v           2661.0    1.0  \n",
              "t           2149.0    1.0  \n",
              "z(left)     2324.0    1.0  \n",
              "z(right)    2995.0    1.0  "
            ]
          },
          "execution_count": 11,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "az.summary(m2_acc_infdata)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "No model attribute --> setting up standard HDDM\n",
            "Set model to ddm\n",
            "hddm sampling elpased time:  16.783 s\n",
            "Start converting to InferenceData...\n"
          ]
        }
      ],
      "source": [
        "# using choice coding\n",
        "data['response'] = data['choice']\n",
        "\n",
        "m2_choice = hddm.HDDM(data,\n",
        "                      depends_on={'z': 'stimulus'},\n",
        "                      include=['v', 'a', 't', 'z'])\n",
        "m2_choice_infdata = m2_choice.sample(2000,\n",
        "                                     burn=1000,\n",
        "                                     chains=4,\n",
        "                                     return_infdata=True,\n",
        "                                     save_name=\"m2_choice\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "It is important to note that imposing the use of choice coding for [perceptual decision-making tasks](./stim_coding_1_concept_and_principle.md#perceptual-decision-making-and-accuracy-coding) with high correctness may some misspecification.\n",
        "- For example, in our example, since the v's in the two conditions are of the same size and of opposite sign, this would result in a combined v value close to 0. And since v is close to 0, this could lead to inaccurate estimation of the true parameters.\n",
        "- And since v is close to 0, this may lead to inaccurate estimation of the true parameters. For example, here a ≈ 1.38 and z(right) = 0.5. \n",
        "- Therefore, it is important not to use coding incorrectly in practice.\n",
        "\n",
        "Translated with www.DeepL.com/Translator (free version)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>mean</th>\n",
              "      <th>sd</th>\n",
              "      <th>hdi_3%</th>\n",
              "      <th>hdi_97%</th>\n",
              "      <th>mcse_mean</th>\n",
              "      <th>mcse_sd</th>\n",
              "      <th>ess_bulk</th>\n",
              "      <th>ess_tail</th>\n",
              "      <th>r_hat</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>a</th>\n",
              "      <td>1.386</td>\n",
              "      <td>0.022</td>\n",
              "      <td>1.344</td>\n",
              "      <td>1.427</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>2670.0</td>\n",
              "      <td>2657.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>v</th>\n",
              "      <td>-0.080</td>\n",
              "      <td>0.060</td>\n",
              "      <td>-0.195</td>\n",
              "      <td>0.029</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.001</td>\n",
              "      <td>1977.0</td>\n",
              "      <td>2355.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>t</th>\n",
              "      <td>0.416</td>\n",
              "      <td>0.003</td>\n",
              "      <td>0.410</td>\n",
              "      <td>0.421</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>2081.0</td>\n",
              "      <td>2691.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z(left)</th>\n",
              "      <td>0.693</td>\n",
              "      <td>0.012</td>\n",
              "      <td>0.669</td>\n",
              "      <td>0.714</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>2062.0</td>\n",
              "      <td>2730.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z(right)</th>\n",
              "      <td>0.510</td>\n",
              "      <td>0.015</td>\n",
              "      <td>0.483</td>\n",
              "      <td>0.537</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.000</td>\n",
              "      <td>2500.0</td>\n",
              "      <td>2608.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "           mean     sd  hdi_3%  hdi_97%  mcse_mean  mcse_sd  ess_bulk   \n",
              "a         1.386  0.022   1.344    1.427      0.000    0.000    2670.0  \\\n",
              "v        -0.080  0.060  -0.195    0.029      0.001    0.001    1977.0   \n",
              "t         0.416  0.003   0.410    0.421      0.000    0.000    2081.0   \n",
              "z(left)   0.693  0.012   0.669    0.714      0.000    0.000    2062.0   \n",
              "z(right)  0.510  0.015   0.483    0.537      0.000    0.000    2500.0   \n",
              "\n",
              "          ess_tail  r_hat  \n",
              "a           2657.0    1.0  \n",
              "v           2355.0    1.0  \n",
              "t           2691.0    1.0  \n",
              "z(left)     2730.0    1.0  \n",
              "z(right)    2608.0    1.0  "
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "az.summary(m2_choice_infdata)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### Stim Coding in HDDMStimCoding\n",
        "\n",
        "Although with the model `m2_acc` and `m2_choice` we can tell whether there is a bias against a particular option (e.g., \"left\") by two parameters of z under two stimulus conditions.\n",
        "\n",
        "However, in the [previous article](./stim_coding_1_concept_and_principle.md#mixed-coding-stimulus-coding), we mentioned a key question: whether it is possible to correctly account for the correct trade-off between response difficulty and speed using the v and a parameters, as well as whether there is a bias against a particular option using the z parameter.\n",
        "\n",
        "And the answer to this question is stimulus coding:\n",
        "\n",
        "$$\n",
        "\\begin{align*}\n",
        "rt,accuracy|stimulus=left&\\sim \\text{WFPT}(v,a,t,z) \\\\\n",
        "rt,accuracy|stimulus=right&\\sim \\text{WFPT}(v,a,t,1-z) \\\\\n",
        "\\end{align*}\n",
        "$$\n",
        "\n",
        "We are posting this table again as a reference for understanding, and we welcome those who are not sure to refer to the [previous article](./stim_coding_1_concept_and_principle.md#mixed-coding-stimulus-coding). \n",
        "\n",
        "|                            | Response                       | Accuracy                          | Stimulus                          | Stimulus Type2                 |\n",
        "| -------------------------- | ------------------------------ | --------------------------------- | --------------------------------- | ------------------------------ |\n",
        "| coding for drift rate (v)  | 1 = option A  <br>0 = option B | 1 = correct  <br>0 = error        | 1 = correct  <br>0 = error        | 1 = left  <br>0 = right        |\n",
        "| interpretation of v        | Preference to option A         | Valid evidence for discrimination | Valid evidence for discrimination | Preference to keys             |\n",
        "| coding for boundary (a)    | 1 = option A  <br>0 = option B | 1 = correct  <br>0 = error        | 1 = correct  <br>0 = error        | 1 = option A  <br>0 = option B |\n",
        "| interpretation of a        | Caution for option A           | Caution for correct               | Caution for correct               | Caution for option A           |\n",
        "| coding for start point (z) | 1 = option A  <br>0 = option B | 1 = correct  <br>0 = error        | 1 = option A  <br>0 = option B    | 1 = option A  <br>0 = option B |\n",
        "| interpretation of z        | Bias to option A               | Pre-judgment evidence             | Bias to option A                  | Bias to option A               |\n",
        "\n",
        "\n",
        "> Note that Stim Coing is essentially a particular model, not an encoding method, and its still dependon on Accuracy or Choice Coding.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "We use HDDMStimCoding from HDDM to implement stim coding. there are two key parameters:\n",
        "- `stim_col='stimulus'`: This argument tells the model which column in the data DataFrame contains the stimulus. In this case, the column is named `‘stimulus’`.\n",
        "- `split_param='z'`: This argument specifies that the starting point parameter (z) will be split by the stimulus condition. This means that z is positive under one stimulus condition and negative under another stimulus condition, allowing the model to account for potential biases in decision-making based on the stimulus presented."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Setting model to be non-informative\n",
            "Adding z to includes.\n",
            "No model attribute --> setting up standard HDDM\n",
            "Set model to ddm\n",
            "hddm sampling elpased time:  7.945 s\n",
            "Start converting to InferenceData...\n"
          ]
        }
      ],
      "source": [
        "# Note: it only work in the hddm 0.8.0\n",
        "# using stim coding\n",
        "data['response'] = data['accuracy']\n",
        "\n",
        "# HDDMStimCoding set right as upper boundary as default\n",
        "# Thus we recode it to allow the \"left\" as upper boundary\n",
        "tmp_df = data\n",
        "tmp_df['stimulus'] = tmp_df['stimulus'].replace({\"left\": \"B\", \"right\": \"A\"})\n",
        "\n",
        "m2_stim = hddm.HDDMStimCoding(\n",
        "    tmp_df,\n",
        "    stim_col='stimulus',\n",
        "    split_param='z',\n",
        "    include=['v', 'a', 't', 'z'],\n",
        ")\n",
        "m2_stim_infdata = m2_stim.sample(2000,\n",
        "                                 burn=1000,\n",
        "                                 chains=4,\n",
        "                                 return_infdata=True,\n",
        "                                 save_name=\"m2_stim\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "The results show that z ≈ 0.6, which is consistent with the real results, indicating that there is a tendency for \"left\" (0.6=1-0.4)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>mean</th>\n",
              "      <th>sd</th>\n",
              "      <th>hdi_3%</th>\n",
              "      <th>hdi_97%</th>\n",
              "      <th>mcse_mean</th>\n",
              "      <th>mcse_sd</th>\n",
              "      <th>ess_bulk</th>\n",
              "      <th>ess_tail</th>\n",
              "      <th>r_hat</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>z</th>\n",
              "      <td>0.525</td>\n",
              "      <td>0.007</td>\n",
              "      <td>0.512</td>\n",
              "      <td>0.538</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>3952.0</td>\n",
              "      <td>2723.0</td>\n",
              "      <td>1.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "    mean     sd  hdi_3%  hdi_97%  mcse_mean  mcse_sd  ess_bulk  ess_tail   \n",
              "z  0.525  0.007   0.512    0.538        0.0      0.0    3952.0    2723.0  \\\n",
              "\n",
              "   r_hat  \n",
              "z    1.0  "
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "az.summary(m2_stim_infdata)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "**supplementary: HDDMStimCoding Schema**\n",
        "\n",
        "HDDMStimCoding essentially uses HDDM's `depends_on` functionality, passing `stim_col` as a `depends_on` parameter to enable stimulus coding for a particular parameter.\n",
        "\n",
        "As seen in the source code, it provides two coding modes for `v` and `z`.\n",
        "\n",
        "![fig4_HDDMStimCoding_source_code](../figs/fig4_HDDMStimCoding_source_code.png)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### Stim Coding in HDDMRegressor\n",
        "\n",
        "In HDDM, an alternative approach to implementing stim coding is through the use of HDDMRegressor. Unlike HDDMStimCoding, HDDMRegressor allows users to apply stim coding to any parameter within a regression model, offering greater flexibility in model specification. However, this also requires users to have a deeper understanding of the model and its coding intricacies.\n",
        "- We define our regression model `reg` as a dictionary that specifies the relationship between the starting point parameter z and the stimulus. \n",
        "- The model is defined as “z ~ 1”, indicating that the starting point is a function of the intercept, and the link_func is set to `z_link_func`, which is a custom function we’ve created to implement the stim coding."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "No model attribute --> setting up standard HDDM\n",
            "Set model to ddm\n",
            "hddm sampling elpased time:  51.309 s\n",
            "Start converting to InferenceData...\n"
          ]
        }
      ],
      "source": [
        "# using stim coding with HDDMRegressor\n",
        "data['response'] = data['accuracy']\n",
        "\n",
        "\n",
        "def z_link_func(x, data=data):\n",
        "  # 1 is left; 0 is right\n",
        "  stim = data.stim_code.loc[x.index]\n",
        "  z_flip = (stim * x) + (1 - x) * (1 - stim)\n",
        "\n",
        "  return z_flip\n",
        "\n",
        "\n",
        "# from patsy import dmatrix\n",
        "# def z_link_func(x, data=data):\n",
        "#     stim = (np.asarray(dmatrix('0 + C(s, [[0], [1]])',\n",
        "#                               {'s': data.stimulus.loc[x.index]},return_type='dataframe'))\n",
        "#     )\n",
        "#     # Apply z = (1 - x) to flip them along 0.5\n",
        "#     z_flip = np.subtract(stim, x.to_frame())\n",
        "#     # The above inverts those values we do not want to flip,\n",
        "#     # so invert them back\n",
        "#     z_flip[stim == 0] *= -1\n",
        "#     return z_flip\n",
        "\n",
        "reg = [{\"model\": \"z ~ 1\", \"link_func\": z_link_func}]\n",
        "\n",
        "m3_stim = hddm.HDDMRegressor(\n",
        "    data,\n",
        "    reg,\n",
        "    include=['v', 'a', 't', 'z'],\n",
        ")\n",
        "m3_stim_infdata = m3_stim.sample(2000,\n",
        "                                 burn=1000,\n",
        "                                 chains=4,\n",
        "                                 return_infdata=True,\n",
        "                                 save_name=\"m3_stim\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Since we can customise the upper bound to be \"left\" in the link function, the resulting `z_intercept` represents the decision bias for \"left\". The other results are the same as in the previous model."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>mean</th>\n",
              "      <th>sd</th>\n",
              "      <th>hdi_3%</th>\n",
              "      <th>hdi_97%</th>\n",
              "      <th>mcse_mean</th>\n",
              "      <th>mcse_sd</th>\n",
              "      <th>ess_bulk</th>\n",
              "      <th>ess_tail</th>\n",
              "      <th>r_hat</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>a</th>\n",
              "      <td>1.461</td>\n",
              "      <td>0.018</td>\n",
              "      <td>1.429</td>\n",
              "      <td>1.496</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1545.0</td>\n",
              "      <td>2161.0</td>\n",
              "      <td>1.01</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>v</th>\n",
              "      <td>1.044</td>\n",
              "      <td>0.037</td>\n",
              "      <td>0.976</td>\n",
              "      <td>1.112</td>\n",
              "      <td>0.001</td>\n",
              "      <td>0.0</td>\n",
              "      <td>3510.0</td>\n",
              "      <td>3128.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>t</th>\n",
              "      <td>0.406</td>\n",
              "      <td>0.003</td>\n",
              "      <td>0.400</td>\n",
              "      <td>0.411</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1511.0</td>\n",
              "      <td>2421.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>z_Intercept</th>\n",
              "      <td>0.595</td>\n",
              "      <td>0.006</td>\n",
              "      <td>0.583</td>\n",
              "      <td>0.607</td>\n",
              "      <td>0.000</td>\n",
              "      <td>0.0</td>\n",
              "      <td>2892.0</td>\n",
              "      <td>2750.0</td>\n",
              "      <td>1.00</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "              mean     sd  hdi_3%  hdi_97%  mcse_mean  mcse_sd  ess_bulk   \n",
              "a            1.461  0.018   1.429    1.496      0.000      0.0    1545.0  \\\n",
              "v            1.044  0.037   0.976    1.112      0.001      0.0    3510.0   \n",
              "t            0.406  0.003   0.400    0.411      0.000      0.0    1511.0   \n",
              "z_Intercept  0.595  0.006   0.583    0.607      0.000      0.0    2892.0   \n",
              "\n",
              "             ess_tail  r_hat  \n",
              "a              2161.0   1.01  \n",
              "v              3128.0   1.00  \n",
              "t              2421.0   1.00  \n",
              "z_Intercept    2750.0   1.00  "
            ]
          },
          "execution_count": 15,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "az.summary(m3_stim_infdata)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "From the results of the model comparison, it is clear that\n",
        "- `m3_stim` is the optimal model with the lowest dic, which indicates that it fits the data best.\n",
        "- It should be emphasised that `m3_stim` has only four parameters, whereas other models like `m2_acc` has eight parameters. "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>model</th>\n",
              "      <th>DIC</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>m2_choice</th>\n",
              "      <td>m2_choice</td>\n",
              "      <td>1381.090657</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>m0</th>\n",
              "      <td>m0</td>\n",
              "      <td>1224.168689</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>m2_stim</th>\n",
              "      <td>m2_stim</td>\n",
              "      <td>1172.733811</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>m1_choice</th>\n",
              "      <td>m1_choice</td>\n",
              "      <td>1096.084242</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>m1_acc</th>\n",
              "      <td>m1_acc</td>\n",
              "      <td>1095.767294</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>m2_acc</th>\n",
              "      <td>m2_acc</td>\n",
              "      <td>1092.376936</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>m3_stim</th>\n",
              "      <td>m3_stim</td>\n",
              "      <td>1090.705884</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "               model          DIC\n",
              "m2_choice  m2_choice  1381.090657\n",
              "m0                m0  1224.168689\n",
              "m2_stim      m2_stim  1172.733811\n",
              "m1_choice  m1_choice  1096.084242\n",
              "m1_acc        m1_acc  1095.767294\n",
              "m2_acc        m2_acc  1092.376936\n",
              "m3_stim      m3_stim  1090.705884"
            ]
          },
          "execution_count": 21,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "DIC_dict = {\n",
        "    \"m0\": m0.dic,\n",
        "    \"m1_acc\": m1_acc.dic,\n",
        "    \"m1_choice\": m1_choice.dic,\n",
        "    \"m2_acc\": m2_acc.dic,\n",
        "    \"m2_choice\": m2_choice.dic,\n",
        "    \"m2_stim\": m2_stim.dic,\n",
        "    \"m3_stim\": m3_stim.dic,\n",
        "}\n",
        "\n",
        "DIC_table = pd.DataFrame.from_dict(DIC_dict, orient=\"index\", columns=[\"DIC\"])\n",
        "DIC_table[\"model\"] = DIC_table.index\n",
        "DIC_table = DIC_table[[\"model\", \"DIC\"]]\n",
        "DIC_table.sort_values(by=[\"DIC\"], ascending=False)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Drfit rate v and Stim Coding Type2\n",
        "\n",
        "Finally, we briefly describe how to implement the second stim coding model for the drift rate v:\n",
        "\n",
        "$$\n",
        "\\begin{align*}\n",
        "rt,choice|location=left&\\sim \\text{WFPT}(v,a,t,z) \\\\\n",
        "rt,choice|location=right&\\sim \\text{WFPT}(-v,a,t,z) \\\\\n",
        "\\end{align*}\n",
        "$$\n",
        "\n",
        "We postulate a binary food choice task where the upper boundary corresponds to selecting the left option and the lower boundary to selecting the right option. \n",
        "- We maintain the assumption that individuals exhibit a bias towards choosing the left option, thus setting z = 0.6.\n",
        "- Given that the most preferred food item could potentially appear on either the left or right side, we denote this optimal choice `location` for option in “left” or “right.”\n",
        "- It is crucial to note that when the optimal choice is on the left, individuals are more likely to choose the left option with a probability greater than 0.5, indicating v > 0. Conversely, when the optimal choice is on the right, the probability of choosing the left option less than 0.5, indicating v < 0.\n",
        "- Furthermore, since individuals maintain a consistent preference for the optimal option, v exhibits only a sign difference across different location conditions, without any absolute value difference.\n",
        "\n",
        "To investigate whether individuals demonstrate a bias towards the left option without being influenced by the location of the options, we need to consider different orientations or signs of v based on the optimal option's location. \n",
        "- If the stimulus is on the left, we set v to be positive, and if it is on the right, we set v to be negative. \n",
        "- This is the decision process described by **Stim Coding Type 2**.\n",
        "\n",
        "For space reasons, we won't say more about it, but we provide the key code as a reference, the basic principle is the same as Stim Coding Type1."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>rt</th>\n",
              "      <th>response</th>\n",
              "      <th>subj_idx</th>\n",
              "      <th>location</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1.480</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.471</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1.197</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0.617</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>1.461</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0</td>\n",
              "      <td>left</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "      rt  response  subj_idx location\n",
              "0  1.480       1.0         0     left\n",
              "1  0.471       1.0         0     left\n",
              "2  1.197       1.0         0     left\n",
              "3  0.617       1.0         0     left\n",
              "4  1.461       1.0         0     left"
            ]
          },
          "execution_count": 203,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# simulated data\n",
        "n_subjects = 1\n",
        "trials_per_level = 500\n",
        "a = 1.5\n",
        "v = 1\n",
        "t = 0.4\n",
        "z = 0.6\n",
        "\n",
        "# only consider the stimulus effect on v\n",
        "df_stim_left = {\"v\": v, \"a\": a, \"t\": t, \"sv\": 0, \"z\": z, \"sz\": 0, \"st\": 0}\n",
        "df_stim_right = {\"v\": -v, \"a\": a, \"t\": t, \"sv\": 0, \"z\": z, \"sz\": 0, \"st\": 0}\n",
        "\n",
        "# combine dataframe\n",
        "data, params = hddm.generate.gen_rand_data(\n",
        "    {\n",
        "        \"left\": df_stim_left,\n",
        "        \"right\": df_stim_right\n",
        "    },\n",
        "    size=trials_per_level,\n",
        "    subjs=n_subjects,\n",
        ")\n",
        "data.rename(columns={'condition': 'location'}, inplace=True)\n",
        "\n",
        "data.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCFElEQVR4nO3deVgVdf//8dcBZBdUQBQkyCWVTDEQwqW0MFIztSxtESSzzVyi7tIsLVvots1Ss/I2M5f0Tk27v3lTiXqXRVniUrdpuaMJiCYoGihnfn/049ydAOUgcHB8Pq5rrovzOZ+Zec9ZX8x8Zo7FMAxDAAAAJuHi7AIAAABqEuEGAACYCuEGAACYCuEGAACYCuEGAACYCuEGAACYCuEGAACYCuEGAACYCuEGAACYCuEGTmGxWPTQQw/V2PLee+89WSwWff/99+fs27NnT/Xs2dN2e+/evbJYLHrvvfdsbU8//bQsFkuN1VcTcnNzNXjwYAUEBMhisWjatGnntbyafg5qUtnzuXfvXmeXYlP2Onn55ZdrfV0Wi0VPP/10teatidfJunXrZLFYtHTp0mrVUBsqep86W32sCX8g3MCm7AulbPL09NRll12mhx56SLm5uc4uz+leeOEFrVixwmnrf/jhh/Xpp59qwoQJmj9/vm644Qan1WJmq1atqnawqA8qep1c6NvkbIsWLTrvfyZQtwg3KGfKlCmaP3++ZsyYoa5du2rWrFmKj4/XyZMnnV1ajfjss8/02WefnbXPk08+qVOnTtm1OTvcrFmzRgMGDNCjjz6qu+66S+3atXNaLbVt2LBhOnXqlMLDw+t83atWrdIzzzxT5+utKRW9Ti70bXK2ysJNeHi4Tp06pWHDhtV9UTgrN2cXgPqnT58+iomJkSTdc889CggI0KuvvqqVK1fq9ttvr3CeoqIi+fj41GWZ1ebu7n7OPm5ubnJzq19vj7y8PDVq1MjZZdQJV1dXubq6OruMC9LF9DpxtrI93Kh/2HODc7r22mslSXv27JEkDR8+XL6+vtq1a5f69u2rhg0b6s4775T0R8h55JFHFBYWJg8PD7Vt21Yvv/yyKvvx+YULF6pt27by9PRUdHS0vvjiC7v79+3bpwcffFBt27aVl5eXAgICdOutt1Y6FuPkyZO67777FBAQID8/PyUlJem3336z6/PXMTcV+euYG4vFoqKiIs2bN8922G748OFau3atLBaLPvroo3LLWLRokSwWizIzM8+6rt27d+vWW29VkyZN5O3trauuukqffPKJ7f6yw4WGYWjmzJm29Z+N1WrV66+/riuuuEKenp4KCgrSDTfcUOGYpBUrVqhDhw7y8PDQ5ZdfrvT09HJ9Nm3apD59+sjPz0++vr667rrr9M033zi8LWWmT5+uyy+/XN7e3mrcuLFiYmK0aNGictv85+c5IiJCN954o9avX6/Y2Fh5enqqZcuWev/998stf+vWrbrmmmvk5eWlFi1a6LnnntPcuXPPOY5n+PDhmjlzpiTZHaL9q3feeUetWrWSh4eHunTpou+++65cn+3bt2vw4MFq0qSJPD09FRMTo48//rjSdZ/LwYMHdffddys4ONj2XL377ru2+yt7nVR1mypitVr1/PPPq0WLFvL09NR1112nnTt32vX58ssvdeutt+qSSy6Rh4eHwsLC9PDDD5fb81n2uXHw4EENHDhQvr6+CgoK0qOPPqrS0lK7vseOHdPw4cPl7++vRo0aKTk5WceOHavyY1WV12HZuKIlS5boiSeeULNmzeTj46ObbrpJ2dnZtn49e/bUJ598on379tkeu4iICEmVj7lZs2aNevToIR8fHzVq1EgDBgzQTz/9ZNen7DNm586dGj58uBo1aiR/f3+lpKSYZi+5M9Wvf01RL+3atUuSFBAQYGs7c+aMEhMT1b17d7388svy9vaWYRi66aabtHbtWo0YMUJRUVH69NNP9be//U0HDx7Ua6+9Zrfc//znP1qyZInGjBkjDw8Pvfnmm7rhhhu0YcMGdejQQZL03Xff6euvv9bQoUPVokUL7d27V7NmzVLPnj21bds2eXt72y3zoYceUqNGjfT0009rx44dmjVrlvbt22f7IKuu+fPn65577lFsbKzuvfdeSVKrVq101VVXKSwsTAsXLtSgQYPs5lm4cKFatWql+Pj4Spebm5urrl276uTJkxozZowCAgI0b9483XTTTVq6dKkGDRqkq6++WvPnz9ewYcPUu3dvJSUlnbPeESNG6L333lOfPn10zz336MyZM/ryyy/1zTff2PbKSdL69eu1fPlyPfjgg2rYsKHeeOMN3XLLLdq/f7/t+f7vf/+rHj16yM/PT4899pgaNGigt99+Wz179tR//vMfxcXFVXlbJGn27NkaM2aMBg8erLFjx+r333/X1q1b9e233+qOO+4463bt3LlTgwcP1ogRI5ScnKx3331Xw4cPV3R0tC6//HJJf4SAXr16yWKxaMKECfLx8dE//vEPeXh4nPNxu++++/Trr7/q888/1/z58yvss2jRIh0/flz33XefLBaLpk6dqptvvlm7d+9WgwYNbI9Zt27dFBoaqvHjx8vHx0f//Oc/NXDgQC1btqzca+VccnNzddVVV9kGgQcFBenf//63RowYocLCQo0bN67S10mrVq3OuU2VefHFF+Xi4qJHH31UBQUFmjp1qu688059++23tj4ffvihTp48qQceeEABAQHasGGDpk+frgMHDujDDz+0W15paakSExMVFxenl19+WatXr9Yrr7yiVq1a6YEHHpAkGYahAQMGaP369br//vvVvn17ffTRR0pOTq7yY1WV12GZ559/XhaLRY8//rjy8vI0bdo0JSQkaPPmzfLy8tLEiRNVUFCgAwcO2D7DfH19K13/6tWr1adPH7Vs2VJPP/20Tp06penTp6tbt27KysqyBaMyt912my699FKlpaUpKytL//jHP9S0aVP9/e9/r9L2ohIG8P/NnTvXkGSsXr3aOHz4sJGdnW0sXrzYCAgIMLy8vIwDBw4YhmEYycnJhiRj/PjxdvOvWLHCkGQ899xzdu2DBw82LBaLsXPnTlubJEOS8f3339va9u3bZ3h6ehqDBg2ytZ08ebJcnZmZmYYk4/333y9Xe3R0tFFSUmJrnzp1qiHJWLlypa3tmmuuMa655hrb7T179hiSjLlz59raJk+ebPz17eHj42MkJyeXq2fChAmGh4eHcezYMVtbXl6e4ebmZkyePLlc/z8bN26cIcn48ssvbW3Hjx83Lr30UiMiIsIoLS21tUsyRo0addblGYZhrFmzxpBkjBkzptx9VqvVbnnu7u52z8uWLVsMScb06dNtbQMHDjTc3d2NXbt22dp+/fVXo2HDhsbVV1/t8LYMGDDAuPzyy8+6DWXP5549e2xt4eHhhiTjiy++sLXl5eUZHh4exiOPPGJrGz16tGGxWIxNmzbZ2o4cOWI0adKk3DIrMmrUqHLPvWH873USEBBgHD161Na+cuVKQ5Lxr3/9y9Z23XXXGVdccYXx+++/29qsVqvRtWtXo02bNmddv2H88dz8+bUzYsQIo3nz5kZ+fr5dv6FDhxr+/v5275OKXieVbVNl1q5da0gy2rdvbxQXF9vaX3/9dUOS8cMPP9jaKnqPpqWlGRaLxdi3b5+trexzY8qUKXZ9O3fubERHR9tul32OTJ061dZ25swZo0ePHuXepxWp6uuwbBtDQ0ONwsJCW99//vOfhiTj9ddft7X169fPCA8PL7euij47oqKijKZNmxpHjhyxtW3ZssVwcXExkpKSbG1lnzF333233TIHDRpkBAQEnHUbcW4clkI5CQkJCgoKUlhYmIYOHSpfX1999NFHCg0NtetX9p9WmVWrVsnV1VVjxoyxa3/kkUdkGIb+/e9/27XHx8crOjradvuSSy7RgAED9Omnn9p2U3t5ednuP336tI4cOaLWrVurUaNGysrKKlf7vffea/vvuaxGNzc3rVq1ysFHoeqSkpJUXFxsd9rskiVLdObMGd11111nnXfVqlWKjY1V9+7dbW2+vr669957tXfvXm3bts3hepYtWyaLxaLJkyeXu++ve68SEhLUqlUr2+2OHTvKz89Pu3fvlvTHf9qfffaZBg4cqJYtW9r6NW/eXHfccYfWr1+vwsJCh7alUaNGOnDgQIWHcs4lMjJSPXr0sN0OCgpS27ZtbfVKUnp6uuLj4xUVFWVra9Kkie3Q6fkaMmSIGjdubLtdVk9ZDUePHtWaNWt022236fjx48rPz1d+fr6OHDmixMRE/fLLLzp48GCV12cYhpYtW6b+/fvLMAzb8vLz85WYmKiCgoIK3ws1ISUlxW6M2l+3VbJ/jxYVFSk/P19du3aVYRjatGlTuWXef//9drd79Ohht7xVq1bJzc3N7vPF1dVVo0ePrlLNjr6nkpKS1LBhQ9vtwYMHq3nz5tX6zDh06JA2b96s4cOHq0mTJrb2jh07qnfv3hUus6LH48iRI7b3FaqHcINyZs6cqc8//1xr167Vtm3btHv3biUmJtr1cXNzU4sWLeza9u3bp5CQELsPCklq37697f4/a9OmTbl1X3bZZTp58qQOHz4sSTp16pQmTZpkG8MTGBiooKAgHTt2TAUFBeXm/+syfX191bx581q9Xkq7du3UpUsXLVy40Na2cOFCXXXVVWrduvVZ5923b5/atm1brr2yx6wqdu3apZCQELsP18pccskl5doaN25sG6d0+PBhnTx5stIarVarbXxCVbfl8ccfl6+vr2JjY9WmTRuNGjVKX331VZW27Vz1lq2nosf9XM9FVf21hrKgU1bDzp07ZRiGnnrqKQUFBdlNZYEzLy+vyus7fPiwjh07pnfeeafc8lJSUhxe3l+XnZOTY5tOnDjh0LZK0v79+21f5mXjaK655hpJKvceLRv/9ddl/vX5a968eblDPxW9tiri6Hvqr58ZFotFrVu3rtZnRtmyK1t/fn6+ioqK7Nqr8hjDcYy5QTmxsbF24zIq4uHhIReX2s/Go0eP1ty5czVu3DjFx8fL399fFotFQ4cOldVqrfX1V1VSUpLGjh2rAwcOqLi4WN98841mzJjh7LLOqbIzkoxKBoDXhPbt22vHjh36v//7P6Wnp2vZsmV68803NWnSpHOeruyMeh2toex1+eijj5b7p6CMI0GrbHl33XVXpeNOOnbsWOXl/VmXLl3svuwnT55sdz2cc21raWmpevfuraNHj+rxxx9Xu3bt5OPjo4MHD2r48OHl3qOcAVdefXhNmxHhBjUmPDxcq1ev1vHjx+323mzfvt12/5/98ssv5Zbx888/y9vb2/bf3dKlS5WcnKxXXnnF1uf333+v9MyJX375Rb169bLdPnHihA4dOqS+fftWe7vKnG1A8tChQ5WamqoPPvhAp06dUoMGDTRkyJBzLjM8PFw7duwo117ZY1YVrVq10qeffqqjR49Wae/N2QQFBcnb27vSGl1cXBQWFmartarb4uPjoyFDhmjIkCEqKSnRzTffrOeff14TJkw471Nrw8PDy53RI6nCtoqc75Wpyw7fNWjQQAkJCee1LOmP56Bhw4YqLS2t9vIq26aFCxfandX050OPVfHDDz/o559/1rx58+wGun/++efVqlP64/nLyMjQiRMn7PbeVPTaqmx+R95Tf/0cMgxDO3futAuMVX1NlC27svUHBgZeMJfMuNBxWAo1pm/fviotLS23x+K1116TxWJRnz597NozMzPtxgpkZ2dr5cqVuv76623/zbi6upb7D2b69OnlTh0t88477+j06dO227NmzdKZM2fKrbs6fHx8Kg1VgYGB6tOnjxYsWKCFCxfqhhtuUGBg4DmX2bdvX23YsMHudPGioiK98847ioiIUGRkpMN13nLLLTIMo8K9II7+N+jq6qrrr79eK1eutNtNn5ubq0WLFql79+7y8/NzaFuOHDlitw53d3dFRkbKMAy75666EhMTlZmZqc2bN9vajh49anfY8GzKvnwcOfX4z5o2baqePXvq7bff1qFDh8rdX3bItapcXV11yy23aNmyZfrxxx+rtbzKtqlbt25KSEiwTY6Gm7L36Z9fV4Zh6PXXX3doOX/Wt29fnTlzRrNmzbK1lZaWavr06VWe35H31Pvvv6/jx4/bbi9dulSHDh2y+8zw8fGp8DD4XzVv3lxRUVGaN2+e3WP9448/6rPPPquRf7JQNey5QY3p37+/evXqpYkTJ2rv3r3q1KmTPvvsM61cuVLjxo2zG7gqSR06dFBiYqLdqeCS7L6Ub7zxRs2fP1/+/v6KjIxUZmamVq9ebXda+p+VlJTouuuu02233aYdO3bozTffVPfu3XXTTTed9/ZFR0dr9erVevXVVxUSEqJLL73Udhq09MehqcGDB0uSnn322Sotc/z48frggw/Up08fjRkzRk2aNNG8efO0Z88eLVu2rFqH/nr16qVhw4bpjTfe0C+//KIbbrhBVqtVX375pXr16uXw70k999xz+vzzz9W9e3c9+OCDcnNz09tvv63i4mJNnTrV4W25/vrr1axZM3Xr1k3BwcH66aefNGPGDPXr16/ceK3qeOyxx7RgwQL17t1bo0ePtp0Kfskll+jo0aPn/C+8bJD7mDFjlJiYKFdXVw0dOtShGmbOnKnu3bvriiuu0MiRI9WyZUvl5uYqMzNTBw4c0JYtWxxa3osvvqi1a9cqLi5OI0eOVGRkpI4ePaqsrCytXr1aR48erfVtqki7du3UqlUrPfroozp48KD8/Py0bNmy8xov0r9/f3Xr1k3jx4/X3r17FRkZqeXLl1cpXEiOv6eaNGmi7t27KyUlRbm5uZo2bZpat26tkSNH2vpER0dryZIlSk1NVZcuXeTr66v+/ftXuP6XXnpJffr0UXx8vEaMGGE7Fdzf35+fwKhLdX5+FuqtstNvv/vuu7P2S05ONnx8fCq87/jx48bDDz9shISEGA0aNDDatGljvPTSS3anIBvG/05XXbBggdGmTRvDw8PD6Ny5s7F27Vq7fr/99puRkpJiBAYGGr6+vkZiYqKxfft2Izw83O607LLa//Of/xj33nuv0bhxY8PX19e488477U7JNIzqnwq+fft24+qrrza8vLwMSeVOCy8uLjYaN25s+Pv7G6dOnTrrY/hnu3btMgYPHmw0atTI8PT0NGJjY43/+7//K9dPFZziW5kzZ84YL730ktGuXTvD3d3dCAoKMvr06WNs3LjxnMv762NrGIaRlZVlJCYmGr6+voa3t7fRq1cv4+uvv67Wtrz99tvG1VdfbQQEBBgeHh5Gq1atjL/97W9GQUGBrU9lp4L369ev3Dr/+nwahmFs2rTJ6NGjh+Hh4WG0aNHCSEtLM9544w1DkpGTk3O2h844c+aMMXr0aCMoKMiwWCy210HZ6+Sll14qN4/+cup22WORlJRkNGvWzGjQoIERGhpq3HjjjcbSpUvPuv7Klpebm2uMGjXKCAsLMxo0aGA0a9bMuO6664x33nmn3Lx/fV4r26bKlJ0m/eGHH9q1V/Re2bZtm5GQkGD4+voagYGBxsiRI22XFPhzv8o+Nyp6rx05csQYNmyY4efnZ/j7+xvDhg0zNm3aVKVTwQ2jaq/Dsm384IMPjAkTJhhNmzY1vLy8jH79+tmdwm4YhnHixAnjjjvuMBo1amRIsp0WXtHjYRiGsXr1aqNbt26Gl5eX4efnZ/Tv39/Ytm1bhdt9+PBhu/aKXvtwnMUwGLUE1IQzZ84oJCRE/fv315w5c5xdDv5i3Lhxevvtt3XixAkGtkLr1q1Tr1699OGHH9r2uMI8GHMD1JAVK1bo8OHDVbqCMGrXXy/9f+TIEc2fP1/du3cn2AAXAcbcAOfp22+/1datW/Xss8+qc+fOtmt8wHni4+PVs2dPtW/fXrm5uZozZ44KCwv11FNPObs0AHWAcAOcp1mzZmnBggWKiooq9wN6cI6+fftq6dKleuedd2SxWHTllVdqzpw5uvrqq51dGoA6wJgbAABgKoy5AQAApkK4AQAApnLRjbmxWq369ddf1bBhw/O+zDoAAKgbhmHo+PHjCgkJOecFTi+6cPPrr7/afgsHAABcWLKzs9WiRYuz9rnowk3Z5d2zs7Ntv4kDAADqt8LCQoWFhVXpZ1ouunBTdijKz8+PcAMAwAWmKkNKGFAMAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXADAABMhXBTQ4qKimSxWGSxWFRUVOTscgAAuGgRbgAAgKkQbgAAgKkQbgAAgKkQbgAAgKkQbgAAgKkQbmpIaWmp7e8vvvjC7jYAAKg7hJsasHz5ckVGRtpu9+3bVxEREVq+fLkTqwIA4OJEuDlPy5cv1+DBg3Xw4EG79oMHD2rw4MEEHAAA6hjh5jyUlpZq7NixMgyj3H1lbePGjeMQFQAAdYhwcx6+/PJLHThwoNL7DcNQdna2vvzyyzqsCgCAixvh5jwcOnSoRvsBAIDzR7g5D82bN6/RfgAA4PwRbs5Djx491KJFC1kslgrvt1gsCgsLU48ePeq4MgAALl6Em/Pg6uqq119/XZLKBZyy29OmTZOrq2ud1wYAwMXK6eFm5syZioiIkKenp+Li4rRhw4ZK+54+fVpTpkxRq1at5OnpqU6dOik9Pb0Oqy3v5ptv1tKlSxUSEmLX3qJFCy1dulQ333yzkyoDAODi5NRws2TJEqWmpmry5MnKyspSp06dlJiYqLy8vAr7P/nkk3r77bc1ffp0bdu2Tffff78GDRqkTZs21XHl9m6++WZt27bNdnvVqlXas2cPwQYAACewGBVdpKWOxMXFqUuXLpoxY4YkyWq1KiwsTKNHj9b48ePL9Q8JCdHEiRM1atQoW9stt9wiLy8vLViwoErrLCwslL+/vwoKCuTn51czGyKpqKhIvr6+kqQTJ07Ix8enxpYNAMDFzpHvb6ftuSkpKdHGjRuVkJDwv2JcXJSQkKDMzMwK5ykuLpanp6ddm5eXl9avX1/peoqLi1VYWGg3AQAA83JauMnPz1dpaamCg4Pt2oODg5WTk1PhPImJiXr11Vf1yy+/yGq16vPPP9fy5cvPeh2ZtLQ0+fv726awsLAa3Q4AAFC/OH1AsSNef/11tWnTRu3atZO7u7seeughpaSkyMWl8s2YMGGCCgoKbFN2dnYdVgwAAOqa08JNYGCgXF1dlZuba9eem5urZs2aVThPUFCQVqxYoaKiIu3bt0/bt2+Xr6+vWrZsWel6PDw85OfnZzcBAADzclq4cXd3V3R0tDIyMmxtVqtVGRkZio+PP+u8np6eCg0N1ZkzZ7Rs2TINGDCgtssFAAAXCDdnrjw1NVXJycmKiYlRbGyspk2bpqKiIqWkpEiSkpKSFBoaqrS0NEnSt99+q4MHDyoqKkoHDx7U008/LavVqscee8yZmyFJ8vHxqfDXwQEAQN1yargZMmSIDh8+rEmTJiknJ0dRUVFKT0+3DTLev3+/3Xia33//XU8++aR2794tX19f9e3bV/Pnz1ejRo2ctAUAAKC+cep1bpyhtq5zAwAAas8FcZ0bAACA2kC4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApkK4AQAApuL0cDNz5kxFRETI09NTcXFx2rBhw1n7T5s2TW3btpWXl5fCwsL08MMP6/fff6+jagEAQH3n1HCzZMkSpaamavLkycrKylKnTp2UmJiovLy8CvsvWrRI48eP1+TJk/XTTz9pzpw5WrJkiZ544ok6rhwAANRXTg03r776qkaOHKmUlBRFRkbqrbfekre3t959990K+3/99dfq1q2b7rjjDkVEROj666/X7bfffs69PQAA4OLhtHBTUlKijRs3KiEh4X/FuLgoISFBmZmZFc7TtWtXbdy40RZmdu/erVWrVqlv376Vrqe4uFiFhYV2EwAAMC83Z604Pz9fpaWlCg4OtmsPDg7W9u3bK5znjjvuUH5+vrp37y7DMHTmzBndf//9Zz0slZaWpmeeeaZGawcAAPWX0wcUO2LdunV64YUX9OabbyorK0vLly/XJ598omeffbbSeSZMmKCCggLblJ2dXYcVAwCAuua0PTeBgYFydXVVbm6uXXtubq6aNWtW4TxPPfWUhg0bpnvuuUeSdMUVV6ioqEj33nuvJk6cKBeX8lnNw8NDHh4eNb8BAACgXnLanht3d3dFR0crIyPD1ma1WpWRkaH4+PgK5zl58mS5AOPq6ipJMgyj9ooFAAAXDKftuZGk1NRUJScnKyYmRrGxsZo2bZqKioqUkpIiSUpKSlJoaKjS0tIkSf3799err76qzp07Ky4uTjt37tRTTz2l/v3720IOAAC4uDk13AwZMkSHDx/WpEmTlJOTo6ioKKWnp9sGGe/fv99uT82TTz4pi8WiJ598UgcPHlRQUJD69++v559/3lmbAAAA6hmLcZEdzyksLJS/v78KCgrk5+fn7HIAAEAVOPL9fUGdLQUAAHAuhBsAAGAqhBsA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S0tVWlqqNWvWaOzYsRo6dGht1AgAAFBlDp8t9eyzz2rv3r267rrr5Ob2x+xWq1VJSUmMuQEAAE5X7d+W+uWXX7R582Z5eXnpiiuuUHh4eE3XViv4bSkAAC48jnx/O7znpkybNm3Upk2b6s4OAABQKxwec3PLLbfo73//e7n2qVOn6tZbb62RogAAAKrL4XDzxRdfqG/fvuXa+/Tpoy+++KJGigIAAKguh8PNiRMn5O7uXq69QYMGKiwsrJGiAAAAqsvhcHPFFVdoyZIl5doXL16syMjIGikKAACguhweUPzUU0/p5ptv1q5du3TttddKkjIyMrRo0SItXbq0xgsEAABwhMPhpn///lqxYoVeeOEFLV26VF5eXurUqZPWrFmjJk2a1EaNAAAAVVbt69yUKSws1AcffKA5c+Zo48aNKi0tranaagXXuQEA4MLjyPe3w2NuynzxxRdKTk5WSEiIXnnlFV177bX65ptvqrs4AACAGuHQYamcnBy99957mjNnjgoLC3XbbbepuLhYK1asYDAxAACoF6q856Z///5q27attm7dqmnTpunXX3/V9OnTa7M2AAAAh1V5z82///1vjRkzRg888AA/uwAAAOqtKu+5Wb9+vY4fP67o6GjFxcVpxowZys/Pr83aAAAAHFblcHPVVVdp9uzZOnTokO677z4tXrxYISEhslqt+vzzz3X8+PHarBMAAKBKzutU8B07dmjOnDmaP3++jh07pt69e+vjjz+uyfpqHKeCAwBw4amTU8ElqW3btpo6daoOHDigDz744HwWBQAAUCPO+yJ+Fxr23AAAcOGpsz03AAAA9U29CDczZ85URESEPD09FRcXpw0bNlTa97333pPFYrGbPD0967BaAABQnzk93CxZskSpqamaPHmysrKy1KlTJyUmJiovL6/Sefz8/HTo0CHbtG/fvjqsGAAA1GdODzevvvqqRo4cqZSUFEVGRuqtt96St7e33n333UrnsVgsatasmW0KDg6uw4oBAEB95tRwU1JSoo0bNyohIcHW5uLiooSEBGVmZlY634kTJxQeHq6wsDANGDBA//3vfyvtW1xcrMLCQrsJAACYl1PDTX5+vkpLS8vteQkODlZOTk6F87Rt21bvvvuuVq5cqQULFshqtapr1646cOBAhf3T0tLk7+9vm8LCwmp8OwAAQP3h9MNSjoqPj1dS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",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "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rzb9vT09PVV2SL2j5FPqpH379lx77bWMGzeOd999l4CAACZPnkyLFi249tprAZgyZQrdunXjvvvu4+9//zuenp6sXr2a0aNHExoaSlhYGO+99x5RUVEcPnyYyZMnV3hGeHg4Pj4+LFu2jJYtW+Lt7X3WlCp+fn7ce++9PProo4SGhhIbG8vLL79Mfn4+d955Z51+Rns2u48fP57Zs2dz00038dhjjxEaGsq+fftYuHAh77//foXmszPFxcWxcuVKBg4ciJeXFyEhIXaLScSeVCbYx/3338+4ceOIj49nwIABfPrpp/z666+0adOmRveJi4tj7dq13HjjjXh5edGsWTMHRSxSfRrtLnU2Z84c+vTpwzXXXEP//v2xWq188803tuagDh068N1337Ft2zb69u1L//79+eKLL3B3d8dsNrNw4UISEhLo2rUrDz30EK+88kqF+7u7uzNz5kzeffddoqOjbR9gf/Tiiy8yatQobr31Vnr37s2+fftYvnx5vUrUoqOjWbduHRaLhSuuuIJu3boxceJEgoODMZur/nV87bXX+P7774mJiaFXr15OjFik5lQm1N3NN9/MlClTeOSRR+jduzdJSUmMHTsWb2/vGt1n6tSpHDx4kLZt29K8eXMHRStSMyar1Wp1dRAiIiJybn/605+IjIzk3//+t6tDEakTNbuLiIjUM/n5+cyaNYthw4bh5ubGJ598wooVK/j+++9dHZpInanmU0REpJ4pKChgxIgR/PLLLxQWFtKxY0eefPJJ/vKXv7g6NJE6U/IpIiIiIk6jAUciIiIi4jRKPkVERETEaZR8ioiIiIjTKPkErFYrOTk5qPuriFRF5YSIiH0o+QROnTpFUFAQp06dcnUoIlJPqZwQEbEPJZ8iIiIi4jRKPkVERETEaZR8ioiIiIjTKPkUEREREadR8ikiIiIiTqPkU0REREScRsmniIiIiDiNkk8RERERcRolnyIiIiLiNO6uDkCksbtqxEhS00+etT+iWRjffLnE+QGJiIi4kJJPEQdLTT/JLVM/OGv/x0/f6YJoREREXEvN7iIiIiLiNEo+RURERMRplHyKiIiIiNMo+RQRERERp1HyKSIiIiJO49Lkc+3atYwYMYLo6GhMJhNLliyxHSspKeHxxx+nW7du+Pn5ER0dzW233cbx48cr3CMjI4Obb76ZwMBAgoODufPO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sbF06dKFX375hddff5077rgDAJPJxMSJE3n++edp3749rVu35qmnniI6OpqRI0faLQ6R2tqTegqAUH/Pc54XFeTNr0ezlXyKiEijV6Pkc+nSpbbXy5cvJygoyPa9xWJh5cqVxMXF2S24N954g6eeeor77ruPtLQ0oqOjueeee3j66adt5zz22GPk5eVx9913k5WVxaBBg1i2bBne3pUP7hBxpr1p5TWf526+jT496CjtVCHBpsqb50VEpP4aPHgwPXv2ZMaMGS6LYezYsWRlZdX76SZrlHyW1yaaTCbGjBlT4ZiHhwdxcXG89tprdgsuICCAGTNmnPMf0mQyMXXqVKZOnWq354rYy/7TyWeo37lrPgO83fHxcKOgxILFv7kzQhMRkQbq4MGDtG7dml9++aXCGJd//etfDWK1vBoln2f2tdy0aRPNmjVzSFAijYGlzMqRTGPN9uA/rGz0RyaTifAALw5l5FPqH+mM8EREpJE5s0W6PqvVgKOkpCQlniLnkZxdQInFCmUW/L3P/3de+VRMpf4R5zlTRETqs8zMTG677TZCQkLw9fVl+PDh7N27t8I569atY/Dgwfj6+hISEsKwYcPIzMwEYNmyZQwaNIjg4GDCwsK45ppr2L9/v+3a1q1bA9CrVy9MJhODBw8GjGb3M8e8FBUV8cADDxAeHo63tzeDBg1i06ZNtuNr1qzBZDKxcuVK4uPj8fX1ZcCAASQmJjronTHUep7PlStX8o9//IO77rqLO+64o8ImInD4pFHraS7MwnyOke7lwm3Jp2o+RUQasrFjx7J582aWLl3K+vXrsVqtXHXVVZSUlACwdetWLr/8cjp37sz69ev58ccfGTFihG0wd15eHpMmTWLz5s2sXLkSs9nMddddZ2uBLl9mfMWKFSQnJ7N48eJK43jsscdYtGgR8+bNY8uWLbRr145hw4aRkZFR4bwnnniC1157jc2bN+Pu7u7wXK5Wo92fe+45pk6dSnx8PFFRUeecQkakqTqUYSSfboVZ1To//PQKSBb/5pRYyvBwq9drQIiISCX27t3L0qVLWbduHQMGDABg/vz5xMTEsGTJEkaPHs3LL79MfHw8b7/9tu26Ll262F6PGjWqwj0//PBDmjdvzs6dO+natSvNmxtjA8LCwmxznv9RXl4e77zzDnPnzrUtSz579my+//57PvjgAx599FHbuS+88AKXXnopYKwuefXVV1NYWOiwwdu1Sj5nzZrF3LlzufXWW+0dj0ijcfh08mkuyKrW+YHe7ni6mykudWdvai6dowMdGJ2IiDjCrl27cHd3p1+/frZ9YWFhdOzYkV27dgFGzefo0aOrvMfevXt5+umn2bBhA+np6bYaz8OHD9O1a9dqxbF//35KSkoYOHCgbZ+Hhwd9+/a1xVGue/futtfli/akpaURGxtbrWfVVK2qVoqLi23ZvIhUrrzZ3a2ayafJZCLc32h633E821FhiYiIi/n4+Jzz+IgRI8jIyGD27Nls2LCBDRs2AEb+5QgeHr8Pii1vzS5PeB2hVsnnXXfdxYIFC+wdi0ijcigjDwC3wsxqX9M80Eg+fzum5FNEpCHq1KkTpaWltoQR4OTJkyQmJtK5c2fAqGk8c3XGM5Wf++STT3L55ZfTqVMn20Ckcp6exvR9lS34U65t27Z4enqybt06276SkhI2bdpki8NVatXsXlhYyHvvvceKFSvo3r17hYwZ4PXXX7dLcCINmW3AUTVrPuH3QUe/Hc9xREgiIuJg7du359prr2XcuHG8++67BAQEMHnyZFq0aMG1114LwJQpU+jWrRv33Xcff//73/H09GT16tWMHj2a0NBQwsLCeO+994iKiuLw4cNMnjy5wjPCw8Px8fFh2bJltGzZEm9v77OmWfLz8+Pee+/l0UcfJTQ0lNjYWF5++WXy8/O58847nfZ+VKZWNZ+//vorPXv2xGw2s2PHDn755RfbtnXrVjuHKNLwZOUXk1NYClR/wBFA89PN7juTcygrq/8TBYuIyNnmzJlDnz59uOaaa+jfvz9Wq5VvvvnGVlnXoUMHvvvuO7Zt20bfvn3p378/X3zxBe7u7pjNZhYuXEhCQgJdu3bloYce4pVXXqlwf3d3d2bOnMm7775LdHS0Lan9oxdffJFRo0Zx66230rt3b/bt28fy5csJCQlx+HtwLrWq+Vy9erW94xBpVA6drvUMD/DCUlZa7etC/DzBUkJ+sTFavnUzP0eFKCIidrRmzRrb65CQED766KNznn/ppZdWaBI/09ChQ9m5c2eFfX9cueiuu+7irrvuqrBv7ty5Fb739vZm5syZzJw5s9LnDB48+Kz79uzZ0+GrJGkuFxEHKB/p3irMt0bXmU0m3PNOALBTTe8iItII1arm87LLLjvn3J6rVq2qdUAijUF58hkT6suBGl7rlptKaWA0O5Ozubp7lP2DExERcaFaJZ9nLmIPxuiprVu3smPHDsaMGWOPuEQatPLBRq1Ca95s7p6bRhGq+RQRkcapVsnn9OnTK93/7LPPkpubW6eARBqDY1kFALQMOfdcbpVxy0sFjEFHIiIijY1d+3zecsstfPjhh/a8pUiDdPx08hkVXPOlydxzT2AyQWpOEem5RfYOTaThKsmH3DSwOGaibRFxjlrVfFZl/fr1DlsHVKShsFqtHM82ks8WwTWv+TSVldA6zI8D6XnsSs7h4vbN7R2iSMNiKYYDa+D4L4AV3L2g1SBoEe/qyESkFmqVfP7lL3+p8L3VaiU5OZnNmzfz1FNP2SUwkYYqM7+EwhJjWbLIoNr9MdYpKpAD6XnsPK7kU5o2d5MVfvscMpOMHW5eUFoE+1dCDaYxE5H6o1bJ5x9n0TebzXTs2JGpU6dyxRVX2CUwkYaqvMm9mb8XXu5utbpH5+hAvt6erH6f0uTd1f4kZGaD2QO6XAchcXBkAyT9AEk/0C/a1RGKSE3VKvmcM2eOveMQaTTKk8/oWvT3LNc5KhDQiHdp4o4mMKpVtvG60wgIbWO8ju0PBVmQso3nL3WDMguYa/eHnog4X50GHCUkJPDxxx/z8ccf88svv9grJpEGLTm7EIDooJr39yzXOdpIPvefyKWwxGKXuEQaFKsVlk3GzQSEd4FmHSoebzMY3H24IMwEaTsru4NIkzF48GAmTpxY7fOXLFlCu3btcHNzq9F19lKrms+0tDRuvPFG1qxZQ3BwMABZWVlcdtllLFy4kObN7ddH7dixYzz++ON8++235Ofn065dO+bMmUN8vNHR3Gq18swzzzB79myysrIYOHAg77zzDu3bt7dbDCI1UT7YqDYj3QH279vH8GF/wtT/fso8/eh39Y24n0oholkY33y5xI6RitRj+1bC0Y0UWkx4t73s7OMePhDTD5LWwNGNENEVzrH4iUhdXDViJKnpJ532PEeX9/fccw+33347DzzwAAEBAYwdO5asrCyWLHHcM89Uq+Tz/vvv59SpU/z222906tQJgJ07dzJmzBgeeOABPvnkE7sEl5mZycCBA7nsssv49ttvad68OXv37iUkJMR2zssvv8zMmTOZN28erVu35qmnnmLYsGHs3LlTI+/FJY5nGTWftRnpDlBaZuXWqR/w+S/HOJyRT/zfHqNriyA+fvpOe4YpUr+tfRmApUcCud7Tv/JzonqSl7gaP05A5kEIbe28+KRJSU0/yS1TP3Da8xxZ3ufm5pKWlsawYcOIjnZNp+laNbsvW7aMt99+25Z4AnTu3Jm33nqLb7/91m7BvfTSS8TExDBnzhz69u1L69atueKKK2jbti1g1HrOmDGDJ598kmuvvZbu3bvz0Ucfcfz4cadl7yJ/lFw+x2cdmt0Bmvt7AXDilOb6lCbm2BZjUJHZg08PBld9noc3/91tNV6nbndKaCL1XVFREY888ggtWrTAz8+Pfv36sWbNGgDWrFlDQEAAAEOGDMFkMjF48GDmzZvHF198gclkwmQy2c53lFoln2VlZXh4eJy138PDg7KysjoHVW7p0qXEx8czevRowsPD6dWrF7Nnz7YdT0pKIiUlhaFDh9r2BQUF0a9fP9avX1/lfYuKisjJyamwidhLXSaYP1OzAE8ATmiieZdQOeFCG98zvna5jsziczfQfbb79GdO+h5jCiaRJm7ChAmsX7+ehQsX8uuvvzJ69GiuvPJK9u7dy4ABA0hMTARg0aJFJCcns3TpUq6//nquvPJKkpOTSU5OZsCAAQ6NsVbJ55AhQ3jwwQc5fvy4bd+xY8d46KGHuPzyy+0W3IEDB2z9N5cvX869997LAw88wLx58wBISUkBICIiosJ1ERERtmOVmTZtGkFBQbYtJibGbjFL01ZqKSP1dE1lbZvdy5XXfKbnFmG1Wuscm9SMygkXKciCHYuN1/3uOe/p29IAn1Bjzs/0RIeGJlLfHT58mDlz5vDZZ59x8cUX07ZtWx555BEGDRrEnDlz8PT0JDw8HIDQ0FAiIyMJDAzEx8cHLy8vIiMjiYyMxNPT06Fx1ir5fPPNN8nJySEuLo62bdvStm1bWrduTU5ODm+88YbdgisrK6N379783//9H7169eLuu+9m3LhxzJo1q073nTJlCtnZ2bbtyJEjdopYmrq0U0VYyqy4m000O5081laIryduZhMlFitZBSV2ilCqS+WEi+xaCpYiaN4JWvSp3jURXYyvJ5R8StO2fft2LBYLHTp0wN/f37b98MMP7N+/39Xh2dRqwFFMTAxbtmxhxYoV7N69G4BOnTpVaP62h6ioKDp37lxhX6dOnVi0aBEAkZGRAKSmphIVFWU7JzU1lZ49e1Z5Xy8vL7y86pYYiFQm+fRI98ggb9zMdRt5azabaObvaazxrn6fTqdywkW2fWp87X599UevN+sAB/9nDDqyFIObY2ttROqr3Nxc3NzcSEhIwM2t4ty3/v5VDNxzgRrVfK5atYrOnTuTk5ODyWTiT3/6E/fffz/3338/F154IV26dOF///uf3YIbOHCgrW9CuT179tCqVSsAWrduTWRkJCtXrrQdz8nJYcOGDfTv399ucYhU17Gsus/xeSbboCP1+5SmIOsIHPrReN39+upf59sMvIPBaoGMJIeEJtIQ9OrVC4vFQlpaGu3atauwlVfYVcbT0xOLxXlzStco+ZwxYwbjxo0jMDDwrGNBQUHcc889vP7663YL7qGHHuLnn3/m//7v/9i3bx8LFizgvffeY/z48QCYTCYmTpzI888/z9KlS9m+fTu33XYb0dHRjBw50m5xiFRXsp0GG5VrFqAR79KEbP/M+Bp3MQS1rP51JhOEnZ7b+eQ++8cl0kB06NCBm2++mdtuu43FixeTlJTExo0bmTZtGl9//XWV18XFxfHrr7+SmJhIeno6JSWO7epVo+Rz27ZtXHnllVUev+KKK0hISKhzUOUuvPBCPv/8cz755BO6du3KP//5T2bMmMHNN99sO+exxx7j/vvv5+677+bCCy8kNzeXZcuWaY5PcbqrRoxk+uyPAVi+dBF9+l9Mn/4Xs//AgVrfUzWf0mRYrfDrGU3uNVW+9GbWQeNeIk3UnDlzuO2223j44Yfp2LEjI0eOZNOmTcTGxlZ5zbhx4+jYsSPx8fE0b96cdevWOTTGGvX5TE1NrXSKJdvN3N05ceJEnYM60zXXXMM111xT5XGTycTUqVOZOnWqXZ8rUlOp6SdpMfhS9p/I46Khf6ZHzG0APHXjJbW+Z/mgpbwiC54evnaJU6ReSt0BJ3aDmxd0vrbm1we1BJMbFJ2CgkzwDbV/jNJkRTQLc+pCHxHNwmp0/pnzcnp4ePDcc8/x3HPPVXpucHDwWTOoNG/enO+++67GcdZWjZLPFi1asGPHDtq1a1fp8V9//bXCwB+Rpia3qBQAf+9ajeU7i6e7mWAfD7IKSij1D7fLPUXqpd2nmwTbDQXvoJpf7+YBgdGQfQSyDin5FLvS0sb2VaNm96uuuoqnnnqKwsLCs44VFBTwzDPPnLOWUqSxsyWfXvZJPgGan+73afFT8imN06gRw9m79DUAXl60kSEDetu2pJpMDxMSZ3zNPGj3GEXEfmr0Cfnkk0+yePFiOnTowIQJE+jYsSMAu3fv5q233sJisfDEE084JFCR+s5qMpNXZIwWtGfy2SzAi71puZT6R5z/ZJEGyCPvKO0DiwETj427icc8f+9iEjP6+erfKLgV8D/IOqx+nyL1WI0+ISMiIvjpp5+49957mTJliq3PgMlkYtiwYbz11ltnrTYk0lSUefoBYDaBr6fbec6uvvJBRxY1u0sjNaB5vvEisAV41qFvc0AUmD2gtADy0uwTnIjYXY2rZ1q1asU333xDZmYm+/btw2q10r59e0JCQhwRn0iDUeYVABi1nqbqTo5dDbZmd98wCksseHvYL7EVqQ8GhOcZL5q1r9uNzG4QHAMZB9T0LlKP1bptMCQkhAsvvNCesYg0aGWevyef9uTn6YaPhxsFJbA75RQ9Y4Lten8RlyrIomeIMT+uba7OughuZSSfWYfrfi8RcYhare0uImcr8zIWX7DXSPdyJpPJVvu5/Vi2Xe8t4nL7VuBuBnzD7DNCPdhYAY/sI5hRv0+R+kjJp4idnNnsbm+RgcaiCduOZNn93iIuVT7Fkj1qPQH8w4213S3FxPkX2+eeImJXSj5F7MSRyWdEoFHzqeRTGpXSYti3wnhtr+TTZDYGHgGdg8+eFlBEXE/Jp4id2JJPOze7A0ScrvncdyKXU4WOXXNXxGkO/g+KcsgocjMmiLeXwBYAdFHyKU2YyWRiyZIl1T5/zZo1mEwmsrKyHBZTOft/Soo0UeXJZ4BX1UvQ1paflzvmwmzKvIPYfiybAW2b2f0ZIk6X+A0A60/4crUdZ4goTz47BxXZ757SpI0aMZzMk6lOe15IWASLvvy2TvdITk62+0xEzz77LEuWLGHr1q11uo+STxE7sJRZHdrsDuCec5xi7yC2HslS8ikNn9UKicaH67o0P662571PJ58xfiWQlw5++n2Rusk8mcqqF0Y77XlDnvisTtcXFxcTGRlpp2jsT83uInaQnlsEJjMmE/h6OWYeTvdTyYD6fUojkbwVco6Bhy9bMnzse28Pb2P0PMDRTfa9t0g9NHjwYCZMmMDEiRNp1qwZw4YNO6vZ/aeffqJnz554e3sTHx/PkiVLMJlMZ9ViJiQkEB8fj6+vLwMGDCAxMRGAuXPn8txzz7Ft2zZMJhMmk4m5c+fWKl4lnyJ2kJxt9C3z83THbM/mwzP8nnxquiVpBHYbTe60HUJxmQM+ik7XfnJko/3vLVIPzZs3D09PT9atW8esWbMqHMvJyWHEiBF069aNLVu28M9//pPHH3+80vs88cQTvPbaa2zevBl3d3fuuOMOAG644QYefvhhunTpQnJyMsnJydxwww21ilXN7iJ2kJJtTJId4IDBRuXcT6VgNkFKTiEp2YVEBnk77FkiDne6vycXXA3ssv/9A1tAyq9KPqXJaN++PS+//HKlxxYsWIDJZGL27Nl4e3vTuXNnjh07xrhx484694UXXuDSSy8FYPLkyVx99dUUFhbi4+ODv78/7u7udW7SV82niB2U13w6qr8ngKmshA4RRr/SbUezHPYcEYfLPAipO4xpkdoPc8wzyms+j28Bi2aIkMavT58+VR5LTEyke/fueHv/XmnRt2/fSs/t3r277XVUlDFtWVpamp2iNCj5FLGDFCckn4Btac2t6vcpDdnpgUbE9ge/MMc8wzeMUyVmKMmH1N8c8wyResTPz88u9/Hw+H3GFtPpbmRlZWV2uXc5JZ8idmCr+XRgsztAj9PJpwYdSYNWvqpRx6sc9wyTid3ZxuIMHNvsuOeINAAdO3Zk+/btFBX9Pv3Ypk01H4zn6emJxWKpczxKPkXswFk1nz1aBgPw69FsLGVat1oaoPwMOPST8foCByafwK7s002MRxMc+hyR+u5vf/sbZWVl3H333ezatYvly5fz6quvAr/XblZHXFwcSUlJbN26lfT09ArJbE0o+RSxg+QcY8CRo5PPDhH++Hm6kVtUyp7UUw59lohD7FkOVguEd4HQNg591C7VfIoAEBgYyJdffsnWrVvp2bMnTzzxBE8//TRAhX6g5zNq1CiuvPJKLrvsMpo3b84nn3xSq3ga1Gj3F198kSlTpvDggw8yY8YMAAoLC3n44YdZuHAhRUVFDBs2jLfffpuIiAjXBitNRlmZldRs468/Rze7u7uZ6d0qhP/tTWfTwQw6RQU69Hkidrf7K+PrBXadVr7yR5XXfKbvgYIs8Al2+DOlcQoJi6jzxO81fV5NrFmz5qx9VmvF1rEBAwawbds22/fz58/Hw8OD2NhYwJgr9I/X9OzZs8I+Ly8v/vvf/9Yotso0mORz06ZNvPvuuxVGYQE89NBDfP3113z22WcEBQUxYcIE/vKXv7Bu3ToXRSpNTUZ+McWWMrBa8fN0/K9UfKtQ/rc3nY1JGdzWP87hzxOxm+J82LfSeN3pGoc/LrvEDULijNH1x7dA2yEOf6Y0TnVd6rI++Oijj2jTpg0tWrRg27ZtPP7441x//fX4+Nh5kYdqaBDN7rm5udx8883Mnj27wjql2dnZfPDBB7z++usMGTKEPn36MGfOHH766Sd+/vlnF0YsTUl5f09TcS5uZsdMMH+mC1sbvwObDmac9VeqSL12YDWUFkBQLER2P//59tAi3viqfp/SxKWkpHDLLbfQqVMnHnroIUaPHs17773nklgaRPI5fvx4rr76aoYOHVphf0JCAiUlJRX2X3DBBcTGxrJ+/XpnhylNVPlId3ORY/tg7t+3jz79L2bCbaOhzEJqThG9hozgqhEjHfpcEbvZdUaTu4NWAjtLy9PJp/p9ShP32GOPcfDgQQoLC0lKSmL69On4+vq6JJZ63+y+cOFCtmzZUumUACkpKXh6ehIcHFxhf0REBCkpKVXes6ioqMIIrZycHLvFK01P+epGbg5OPkvLrNwy9QMAPt10hJScQvre/iwJ7zzk0Oc2VSon7MxSCntON106ocndxlbzuRmsVuclvSJSpXpd83nkyBEefPBB5s+fX6PRWOczbdo0goKCbFtMTIzd7i1Nz3En1XyeKTrY+H04nlXgtGc2NSon7OzwT1CQCT6hEHOR854b2Q3MHpCfDlmHnPdcEalSva75TEhIIC0tjd69e9v2WSwW1q5dy5tvvsny5cspLi4mKyurQu1namrqOdcdnTJlCpMmTbJ9n5OTow8WqbUUW/LpvJqx6GAfthzO4lhWQf3+C7IBUzlhZ2dOLO/mxI8eD28jAT2+xaj9DIlz3rNrYdSI4WSeTK3yeEhYRKMY/CJNW71OPi+//HK2b99eYd/tt9/OBRdcwOOPP05MTAweHh6sXLmSUaNGAcb6pYcPH6Z///5V3tfLywsvLy+Hxi5NR/LpZndn1ny2CPbBBGTmlxDs6e+05zYlKifsyGr9Pfl0whRLZ2kZbySfxxKg21+d//wayDyZyqoXRld53JnT/Yg4Sr1OPgMCAujatWuFfX5+foSFhdn233nnnUyaNInQ0FACAwO5//776d+/Pxdd5MRmHWnSbDWfxc5LPr093Gge4EXaqSJKg1s57bkitZK8FbKPgIcvtL3M+c9vEQ+8Z9R8iojL1evkszqmT5+O2Wxm1KhRFSaZF3EGq9XqtNHufxQT6kvaqSJK6nkzogg7Fhlf218BHs6fU9A24j15G5QWg7un82MQEZsGl3z+cRZ/b29v3nrrLd566y3XBCRNWmZ+CUWlZQCYi3Kd+uyYEB8SDmVSEhyL1Wqt0fq8Ik5TVgY7Pjdeu6rJO7QN+IQYA55Sd0CL3ue/RkQcpsElnyL1ybFMo79neIAXFqvFqc+ODvbBbIIy7yAOnsyndTM/pz5fpFqOboSco+SVmvjLuKcoKXvmrFOS9u93bAwmE7ToA/tWGP0+lXyKuJSST5E6OJqZD0DLEB+cPYmLh5uZqCAfjmUVsG5fupJPqZ9ON7n7tejC8n9WPr9nzOjnHR9Hi3gj+Ty6GfqOc/zzRKRKmqVFpA6OnZ5ns0WIa1aJiAkx+s/9uDfdJc8XOSdLKfx2usm9eSfXxqKVjkTqDSWfInVw9HSze8sQFwyiAFqFGbWdP+5Lp8RS5pIYRKp06EfIO0F2sdn182u26GN8PbnP6PspIi6j5FOkDsqTzxbBrkk+IwK9MBXnkVtUyuaD+kCVembbQgDWpvqD2c21sfiGGgOPwOj3KSIuo+RTpA7O7PPpCiaTCY+MJADWJKa5JAaRShWdgp1fALD8eICLgznNts67kk8RV1LyKVIH5X0+XZV8AnhmGCOFVyv5lPrkt8+hJB/C2rMzu56sFFXe7/PoJtfGIdLEKfkUqaXsghJOFZYC0CLYNQOOADwykzCbYE9qrq0mVsTlfplvfO11M1BP5qAtr/k8lmAs+SkiLqHkU6SWyuf4DPPzxMfTdf3ZzKWF9I4NAWD1btV+Sj2Qvg+O/AwmM3S/0dXR/C6yK7h5QkEGZBxwdTQiTZaST5FacnV/zzMN7RwBwPLfUl0ciQiw9XStZ7uhEBjl2ljO5O4Fkd2N1xp0JOIySj5Faun3OT5dn3xe2SUSgPUHTpKZV+ziaKRJKy2CX/5tvO51i2tjqYyt36fm+xRxFSWfIrX0+xyfruvvWS6umR8XRAZgKbPy/S7VfooL/bYE8k5AQDR0vMrV0ZythSabF3E1JZ8itXTMxXN8/tHwrkbz5vIdKS6ORJq0je8aX+PvADcP18ZSmfKaz5TtRi2tiDidkk+RWjqaVX/6fAIM72Y0vf9vbzqnCktcHI00SUcTjL6Ubp7QZ6yro6lcSBz4hoGl2EhARcTp3F0dgEhDZLVaOXyyPPl0fbM7QPtwf9o09+PAiTy++y2VUX1aujokaWrKaz27/AX8m7s2lqqYTEbT+97lRr/P8ppQJxo1YjiZJyvvHpO0f7+ToxFxPiWfIrWQkVdMTmEpJhO0CqsfyafJZOK6ni147fs9LNpyVMmnOFf2Mdix2Hjd727XxnI+LU8nny7q95l5MpVVL4yu9FjM6OedHI2I86nZXaQWDp7MAyA6yAdvDxevWX2Gkb1aAMao9/LR+CJO8dMbUFYCrQZBiz6ujubcyuNrKCsdWYqNTRPjSyOhmk+RWjhwwkg+Wzfzc3EkFcWE+tKvdSgbkjJY8ssxxl/WztUhSVOQewIS5hqvL3nYpaFUS8t4YwL8zIOQcxwCo10d0dkKc+DYJjiRCEU5xj5PPx7rYjb61db3BF/kHJR8itRCec1nXDPXN7nv37ePPv0vtn1fGNENLriafy3dwH2D22Iy1ZOlDaXx+vltKC2A6N7Q5jJXR3N+3kEQ1QOO/wIHf4Tu17s6ooqOboakH4ya5DMV53FlC2D2EFYm+/PG7mbklPze8hISFsGiL791bqwitaDkU6QWktJPJ59hrq/5LC2zcsvUD2zfF5VaeP9/SRR7BbMxKYN+bcJcGJ00egVZsOl94/UljxgDehqCuEGnk8//1Z/k01rGK0PMsH+F8X1QS2jZD4JijPc1N4VFn85n1AVmLo/K5fJWQNdREGBMszbkic9cF7tIDdTrPp/Tpk3jwgsvJCAggPDwcEaOHEliYmKFcwoLCxk/fjxhYWH4+/szatQoUlM1ybY4VlK6MdK9TXPXJ59/5OXuxgWRAQDMW3/QtcFI4/fjdKNZOLwLdBju6miqL+4S4+vBH10bRzmrFRK/4cbOZsAEbS+HHjdDs/bg4W0sDRrciokryqD3GGO6qOJc2LpA69RLg1Ovk88ffviB8ePH8/PPP/P9999TUlLCFVdcQV5enu2chx56iC+//JLPPvuMH374gePHj/OXv/zFhVFLY2e1WjlYj2o+K9MjJhgw1npPztbAI3GQ7KPw8zvG68ufBnO9/kipKPYio99nxgFjpL6rHfoRUndQWmaFztdCywurrkUOiIJet0FwnNE0v+O/cGK3U8MVqYt63ey+bNmyCt/PnTuX8PBwEhISuOSSS8jOzuaDDz5gwYIFDBkyBIA5c+bQqVMnfv75Zy666CJXhC2NXGpOEQUlFtzMJmJCXd/nszLN/L1wzzpMaXAsCzYc5uErOro6JGmMVv8fWIqg1SBGPTKDzJP/qPS0ejl3pXcgRPWE41uM2s8eN7gulowDcGgdAFPWlPHKZRec/xp3L+g2GhK/gbTfYNdS+jYLd3CgIvZRr5PPP8rOzgYgNDQUgISEBEpKShg6dKjtnAsuuIDY2FjWr1+v5FMc4kB6LgAxIT54uNXfmh7vYwnkBsfy8c+HuOfStvh7Nahfd6nvUn8zmnwB/jSVzNnjGt7clXGDTief/3Nd8lmSD4lfG6+je7Fw5yZeqe61Zje44BrACmk7ebZHKhz6CVoNcFCwIvZRfz85/6CsrIyJEycycOBAunbtCkBKSgqenp4EBwdXODciIoKUlKrXty4qKiInJ6fCJlJdB0/396xv0yz9kWf6Hto08yMzv4R/rz/k6nAaHJUT51BWBl8/Alih80ho2UCn/Wnt4n6fVivsWQbFeUYfzjZDan4Pkwk6Xg2hbfF2s8InN0H6PvvHKmJHDSb5HD9+PDt27GDhwoV1vte0adMICgqybTExMXaIUJqKpNM1n3H1PPk0YWXCEGOez/fW7ievqNTFETUsKifOYdsCOPwTePjCFfW0VrM6YvqByQ0ykyDriPOff2IXpO8x+p5eMALcPGp3H7MbdB7JziwvKMyCBddDfoZdQxWxpwaRfE6YMIGvvvqK1atX07Ll70sGRkZGUlxcTFZWVoXzU1NTiYyMrPJ+U6ZMITs727YdOeKCQkcarPo6wXxl/twjmrgwXzLzSzTyvYZUTlQh7yR895TxevAUCG7ASbl3oDGwB2Dvd859tqUY9q82XrcaCAFVf2ZVi5sHT22NNKZlytgPn40BS8n5rxNxgXqdfFqtViZMmMDnn3/OqlWraN26dYXjffr0wcPDg5UrV9r2JSYmcvjwYfr371/lfb28vAgMDKywiVRXYuopADpEBLg4kvNzdzPzwOXtAXh79X7SThW6OKKGQ+VEFZZPgYIMY2qli+51dTR112GY8XXPcuc+9/DPUHzKmPA+pp9dbplZ7A43LQRPf0haC988oiU5pV6q18nn+PHj+fjjj1mwYAEBAQGkpKSQkpJCQYExdUxQUBB33nknkyZNYvXq1SQkJHD77bfTv39/DTYSh8gtKuVopvH/r2MDSD4BRvZsQY+WQeQWlfLSt4nnv0CkEqNGDOe56zrAr59iscKEL7MYcnE/hgzozZABvevniPbq6HCl8TXpByjOd8ojI7xL4MgG45s2Q8Bsx8GAkV1h1AeAyVjydMMs+91bxE7qdfL5zjvvkJ2dzeDBg4mKirJtn376qe2c6dOnc8011zBq1CguueQSIiMjWbx4sQujlsZsz+laz/AAL0L8PF0cTfWYzSae/XMXABZtOUrCIfUFk5pzyz3GM32MGUfcWg3gzcduZdULo21bqaWB9ikO7wRBsVBaaNQWOsHfO5wEqwWCW0GzDvZ/QMcr4Yp/Gq+X/wP2rrD/M0TqoF4nn1artdJt7NixtnO8vb156623yMjIIC8vj8WLF5+zv6dIXSSmGMlnx8iGUetZrldsCKP7GP2lH/3sVwqKLS6OSBoUSymTu6YZCVpApNFHsbEwmc5oel927nPtIWktl0bmYVvFyFHLkfafAD1vAWsZ/Pd2OKFWD6k/6nXyKVLf2JLPBtDkvn/fPvr0v9i2rZj5MOaiHA6k5zHt212uDk8akpXP0TusAMwexqhss5urI7Kv8qb3Pcsd20fSUgrLphivo3uBvwMnhTeZ4JrXIba/sfzpghs0Al7qDc06LVID248ZzY5dWtT/wSelZVZumfpBhX2HTuaxZOtxPlp/iIHtmjGsi1oJ5Dy2/xd+mmm87niVMR9lYxM3yJg26tRxSNkOUd0d85wt8yB1BzklZgLjLrb77ffu28+QAb0r7AvysPD2Re5EkWSMgL9lce2ndBKxEyWfItVkKbOy87gx0Xi3FkEujqZ2WoX54X10I4Ut+zLp060sGT+Q9g2gFldc5Mgm+GICAJ8kBXPTpZ1cHJCDeHhD2yGw+yvYtdQxyWdBJqwy5kSduy+UB4b62P8ZZaWVrzKVd4L8nz/EN2ktfPsYXP2645r7RapBze4i1bT/RC4FJRZ8Pd1o3czf1eHUmu+BNVzUJpS8YgvjPtpMem6Rq0OS+ihtF8z/K5QWQLs/8cHeUFdH5FhdrjO+bv+vY5re17xoTFHVvBNLjzq55cSvOS9sjwBMsPlD2Piec58v8gdKPkWqafvR003u0YG4mRturYHJWsZbf+tNi2AfDp7MZ8yHG8kp1GTUcoaMJPj3dcZqOS0vhOvnUUbD/T9fLR2HG03vmUlwbIt97522GzbONl5fOY0yq/Pfy/Un/GDos8Y33z4Ov33u9BhEyin5FKmmrUeyAOjeMtilcdTV/n37uOJPQ8n7bgam4jx+O55D74nvc+WfR7k6NKkP0nbBh1fCqWRo3gn+9h/wrP+redWZp5/RpxVg2yf2u6/VakzMb7UYa7C3vcx+966Bvfv2M+SxeSw9EghYKfl0LI9cc4FtntZRI4a7JC5pmtTnU6SaNh00RorGtwpxcSR1c+ZApLRThSxKOEZxcCz7ywZTUGzBx7ORjWSW6ju62WhqL8iE8M5w6+fg28ib28/U62bY8V/49T/wp6ng6Vv3e+76EvavAjdPGPZ83e9XW2WlrHrhemPqpZ1f4JGeyKv9TkKPKyAgiiFPfOa62KTJUc2nSDVkF5TYltXsE9ewk88zhQd48+ce0bibTZSEtlETfFP2y3yYc5WReLaIh7Ff13298Yam9WBj4veibNi5pO73KzplNHEDDHgAQtvU/Z51ZTJDpxHGz2kphu3/gbwTro5KmhglnyLVsOVwJlYrtArzJTzA29Xh2FWLEB+u69UCU2khGw9m8LfZP2sQUlNSnAdfPQRf3AeWIqPp+bYlTavGs5zZDH3GGK83zKr7wKPV04zpm0Li4JJH6hye3ZjdoctfwD8SSgpg2wLa+Ot3XpxHze4i1fDTvnQA+sY1zg/k6GAfArd9gvsl97DjWA7XvrmO98fE0ymq/s9nKhWNGjGczJOplR4LCYtg0Zff/r7j0HpYcq8xyAYTnxxryfvf7cb6xqVnXdtg126vqd5j4YdXIHkbHFhT+z6aydt+X1f9qtfAwwFTK9WFuxd0vwF+/RRyU3gt/jgcS4AWfVwdmTQBSj5FqmHtHiP5vKRDcxdH4jjuual89vf+3DF3EwdP5jPqnZ+YfkNPTUTfwGSeTK18rkf4vV9f9lFYOdVIPAACW8K1bzD71keqvDZmtAv7KzqTXxj0vg02vgv/ew3aDK75nJjF+bDoLmOQUedrof1Qh4RaZx4+0ONG+PVTgk4lw9xr4K9zjLXhRRxIyafIeaRkF5KYegqTCQa1a+bqcByqTXN/lowfyIQFv/DjvnTu+XcCYwfEMXn4BXh7aCBSQxfmVQrL/mHM9VhaYOzsfRtc8Tx4N8yFE86lshV/znRWTXC5ARMgYQ4c/B/sWwHt/1SzB3/3BKTvMZq1r55ew6idzN0but/Ipi9mcWGzfFh4EwybBv3u0UT04jBKPsXprhoxktT0k2ftj2gWxjdfLnF+QOexcrfRhNm9ZTAhfp4ujsZxyteCB7BiwrvtEApbXsjcnw6ybl8602/oSdcGurJTk2a1Gv0Oj29l/sWH4Oe3jP2xA2DYC9Ci6uSswatqxZ/TqhzhHRxrJF8/vQHLn4DWlxjN1NWx60sjuQe4bpZRk1rfuXvxj1+i+P7RAbD1Y1j2OBzdCCNmglfDXVBD6i8ln+J0qeknz1pzHODjp+90QTTn9832ZACGd23czc+VrQV/MD2PpRv3sDcN/vzmj9zUN5aHr+hIaCNOwhuN4nw4scvoe5iXBoCnGSPpvORhaHu5arbO5eKHYdtCSE80Vica+sz5r0nZDovvMV4PuN9lc3rWhsVqgmvfhIjO8P3TsGMRHN8K174Frfq7OjxpZJR8isMUFFs4kplPSnahseUUklNQQm77YSz7LQVLmRU3kwk3s7Hlx13C/A2HaBHswwWRgUQGGaPKXVlTmp5bxPr9xrOv7hbl0GfVR3HN/AhO+ICBf3+Rr35NZv6Gw3y57Tj3XNqWWy5qRZCPh6tDlDMVZHFldI7RlzPzIHB6tLbZHZpfwISlmbz5bCXNzHI2nxBjDfT/3Ao/ToeYfufuC5m2G/79FyjJM2pKL69GslrfmEzQf7wx6Oiz2yFjP8wZDn3HwWX/MN4TETtQ8inVVlUSGN4sjLc+/Jhfj2aTmHqKvamn2JuWy+GM/MpnKonuRWLKqbP3txrAE5/vsH1rKjqFZ2YSGSklPPb8bNzNFWcGc0ZN6X8TjlJmhR4xwcSE2mHC6QbIXFLAm3/rza0XneS5L3eyMzmHV5Yn8to32/E8loD38S24Ff3+71lfu080WsV5kPgt7FgM+77nsa7FkHl63saASAjvAhFdwcOHnf/WROI10vnP0GcsJMyF/94BN3wE7SoZPLR/Nfz3dmOO1IhucP1H4NaA/zCLvQjuW2/0Xf3lY2Mt+F//A5c+BvF31L+R+9LgKPmUaitvLi8rs3I8u4CjmQWk5BSyO+UkQ177odJrArzdiQ7yITLIm8hAb4J9Pfjoo3nED70ON7MJi9WKpczY1nz1GZ0v/TM5BSVk5Bdj9QqgKLI7fpHd+fDHg3SKCqB3bAh+Xs75b1tWZmXBhsMA3Nw31inPrM/6tQnjy/sH8eW247y9Zh97UnMpjO1PUWx/Wjfzo3vLIGJDfZn/zF2uDrXxK843Vs35bbGReJbk2w4dzPUgrutFxgpFqqmqu6teNWYH2LcC5l9v1AL2uR0Co41BRZve/305zujecMuixvG++wQbTe5d/wrL/wFpO42vP043+sP2uaNh9GeVeknJp1RLfnEpRc068N1vKSSl51FYWvb7QQ8fPN3NdI0OpFNUIB0iAmgf4c+zD99PeupR0oF0oLxOM/nAAXrfecdZz/j6pwX8+YG/A1BiKSMlu5Ck9Dw27zpAgX8oWw5nse1oNl2jA4lv5fj5Nr/enszhjHwCvd25pkfTa3KvjJvZxMheLfhzj2h6/PlOggbdwtGsAg6k53EgPY8gHw+KY/tzNDOfliFNs6bYYQqyYM9y2P0l7FtZIeEkJM5IErqO4o7rbmHV1QMrvcX5Rn83mbk8a8LNA278BL6aCFvnG3N3ls/feaY+t8OVL4JH41qEgraXwd9/NH72H16G7COw6nlY8xJ0GAY9buKGx9/gRHrlqyRVOaOANGlKPqVKJ04VsXJXKt/vTOXHfekUdfkLu043l3u7m2kV5kdUkDe/fPIKm779FE/3is3iJ1OPcmslA4ueuvGS8z7bw81MTKgvMaG+fP/MaG6f+RWbD2WSnF3ItqPZ7Dieg0frwWTlFxPsa//BL8WlZUxfsQeAuy5ug6+nflXOZDab8Dy5l1F9WpKRV8z2o9nsTMkhu6AEWl/KoJdW07d1KNf1asFVXaMI8m3ATZCuYrXCyX1GDeeeZZC0FspKfz8eFGssk9htlFHjVp3BQ+cZ/d1k5vKsKXdPGPk2dB0FP79t/FtYisE7GNpdDv3uhZgLXR2l45jdjCm5etwEvy0xZkw4/gvs/gp2f8X73cwEtLgAQtsaS4ie0SyvNeOlMvpElQoOnMjlu51Gwlm+pGQ5c0EWPTrE0aa5H9FBPpjNxofdkq0/0v/is1dE2X/ggH2CspbRprk/rZv5cTSzgJ8PnOR4diGW2Iu45OXV/H1wW24f0BofT/vNQ/ne2v0cOJFHqJ8nYwfG2e2+DdGZUzBV2H/63zfUz5NLOzZnQLsw9qSe4tuVP+ARdQEbkzLYmJTBlP9uxT37KKFFycz9v0fpGBmAm/n3RKmhTb3lUNnH4MgGY2Wd/auMWqYzNe8Ena6BC66BqB4are5s7S43trIyo+bZ069p/Ru4eUD30caWuhO2LYBf/0NAbqrRLJ+2EzCBf4QxXVVwLH7uFldHLfVQo0k+33rrLV555RVSUlLo0aMHb7zxBn379nV1WPXaVSNGkpKeQWlAFMXN2lMS1h6LX8VJ1Lu1COKKzhH8qUsEf7vuai655uyazMqm6IHq1XDWhMlkIibUl5YhPhw8mc/X67aSQzgvL0tk7rqDPDi0PdfHx+DhZj7/zc7hp33pTF+xF4Cnr+lMoHfTrrWr7r+vh5uZLtFBLPz6VR6bu5I9qbnsTskhPbeY0pBWpNGKq2b+D19PN7q1CKJTVCBtmvtxpNSf0f94AX8vd0xnfJDX16m37MJqhdw0YyqklO1wZCMc3WzMx3kmNy9jmpu2Q6Dj1dCsHXDuJTTVdO4EZnOjm//yXF0yDh46QlyrmEqPmfEjKBcWPXiRMTo+7wTkphjb0Y0suQx4ZxC06AXRvYxa+vDORm2yNFmNIvn89NNPmTRpErNmzaJfv37MmDGDYcOGkZiYSHh4uKvDq1esVitHMwtYv/8k+5oPwtyjS4X+m2YTuJ1M4unbr2Fo5wiign5vPqkvf9+bTCZaN/MjKOFDnnr7E177bg9HMwt44vMdvLf2AH/rG8uoPi1p5l/NSaHPsHp3GuMXbMFSZmVkz2iu7RntgJ+g8Qvw9qBPqxD6tAohM7+YQyfz+ennn/GK6khuUSkbkjLYkJRhnNzjJj5cdxB3s4lgXw+CfT0J9vGgMKKbMR2Xub78z6shqxXyMyDrkLFlHjKmP0rfA2m7oCDj7GtMbhDZFVoNNObhbDUAPM/uO3uuJTTVdC61co4uGTGjnz9/d402g42tKAeyjkD2Ycg6jFtBJqRuN7YtHxkXuHkazfNh7YytWXujptSvubH5hBoJvjRajSL5fP311xk3bhy33347ALNmzeLrr7/mww8/ZPLkyS6OznmsVit5xRZyCkrILighp6CEzPwSjmUVcCQjn/0nctl+LJus/BLjgvBOUFqGp7uZuFBf2jT3J66ZLy/edhcztn/KjD/c327N6HZiAq7r1ZKrukXxyYbDvLFqH4dO5jPt2928sjyRSzo057KOzendKoR24f54uVfeLG8ps7LpYAYLNx5myVaj5uni9s14cVT3CjVxUjshvp6E+HqyY/ZnbJy1lv0nctl6OIt9J3I5cCKXVQm7wC+M0jIr6bnFpOcWA2BqdzkNMu+0WuG9wRQc/RUft7IqTyuzwrF8D5JyPdmV7cXOLG/25HhRVJbLwUPvE9dqeZXXqnZT6i2vQIjoYmzA6Kmf8NnbLxh9RI9tMb4WZsGJ3cZWGZPZSEA9fY3lP929jX6k5a/dPcHNi1VrfiC3oIiSMlPFzQoePoHc8dqXRlIr9U6DTz6Li4tJSEhgypQptn1ms5mhQ4eyfv16F0bmXJe+sppD6bnGL+15eLiZ6BIdROL/vuKaUTcSGeht678JzmtGtxcvdzfGDmzN6PgYvvr1OAs2HmHbkSxW7U5j1W5jZRd3s4m4Zn6E+hm1al4ebhSXWkjNKeLAiVxyCn8fyDGmfyv+cXWnKpNVqT03s4kOEQF0iAiw7eszaxI3Pfs+OYUlZOWXkJVfTGZ+CXs2JmAyjXJhtLVkMkFh1u+Jp6e/sW66d5AxQMU3FHyb0XHc++xdOJkY4I+/WdWqaRJpAE4WuRsD4zqNMHZYrZB12BhMV76l74Wc40aTfUEGWMsgPx3yz33vIc3OdTTDuLeSz3qpwSef6enpWCwWIiIiKuyPiIhg9+7K/6oqKiqiqKjI9n12djYAOTk5jgvUwYrycykrLgSMpnNPdzNe7ma83N3IPPArt1w3jNgQXzpHBdIuwqgFvGTuI4R6jKa4IK/CvazWMgrzcs96Rn3bbyktPevfbHjHYIZ3DGZv6ilWJ6bx8/4MdqVkc6rAwp4jeWfdo1ygtzuDO4Zzc79YurQIoig/j6Iqz66cpbS0Xr0/9W1/Zf9e5ftLCvLwAXx8IMrHA8I8OPLRt+TkTDzr/JoKCAioVQ12ncqJK2Zyz71/592HrqtysvH8Eis5eYWVHisrq/rY+Y7X9lhTvLa01OKScr+01NJk/u0rfY/dQiD8QmP7I0sJ5J2Eggwm3TeG18cOBEspWEvBYjFmfLBawGrh1YWreOSvA41ktez0sTILWEtZu+MwlxAA1fz3rW05IbVkbeCOHTtmBaw//fRThf2PPvqotW/fvpVe88wzz1gx1p3Tpk1bI9+ys7NrVbaonNCmrelstS0npHZMVmulCyA2GMXFxfj6+vLf//6XkSNH2vaPGTOGrKwsvvjii7Ou+WONRllZGRkZGYSFhTWYv3xycnKIiYnhyJEjBAYGujqcRkHvqf3Vh/fUXjWfKicE9J46Qn14T1Xz6VwNvtnd09OTPn36sHLlSlvyWVZWxsqVK5kwYUKl13h5eeHlVXEkdHBwsIMjdYzAwEAVgHam99T+GuJ7qnJCzkXvqf3pPW06GnzyCTBp0iTGjBlDfHw8ffv2ZcaMGeTl5dlGv4uIiIhI/dAoks8bbriBEydO8PTTT5OSkkLPnj1ZtmzZWYOQRERERMS1GkXyCTBhwoQqm9kbIy8vL5555pmzmgWl9vSe2p/eU9fS+29/ek/tT+9p09PgBxyJiIiISMOh9atERERExGmUfIqIiIiI0yj5FBERERGnUfLZwB08eJA777yT1q1b4+PjQ9u2bXnmmWcoLi52dWgNyltvvUVcXBze3t7069ePjRs3ujqkBmvatGlceOGFBAQEEB4ezsiRI0lMTHR1WE2aygn7UVlhHyonmjYlnw3c7t27KSsr49133+W3335j+vTpzJo1i3/84x+uDq3B+PTTT5k0aRLPPPMMW7ZsoUePHgwbNoy0tDRXh9Yg/fDDD4wfP56ff/6Z77//npKSEq644gry8vJcHVqTpXLCPlRW2I/KiaZNo90boVdeeYV33nmHAwcOuDqUBqFfv35ceOGFvPnmm4CxQlZMTAz3338/kydPdnF0Dd+JEycIDw/nhx9+4JJLLnF1OHKayomaU1nhOConmhbVfDZC2dnZhIaGujqMBqG4uJiEhASGDh1q22c2mxk6dCjr1693YWSNR3Z2NoD+T9YzKidqRmWFY6mcaFqUfDYy+/bt44033uCee+5xdSgNQnp6OhaL5azVsCIiIkhJSXFRVI1HWVkZEydOZODAgXTt2tXV4chpKidqTmWF46icaHqUfNZTkydPxmQynXPbvXt3hWuOHTvGlVdeyejRoxk3bpyLIhf53fjx49mxYwcLFy50dSiNksoJaQxUTjQ9jWZ5zcbm4YcfZuzYsec8p02bNrbXx48f57LLLmPAgAG89957Do6u8WjWrBlubm6kpqZW2J+amkpkZKSLomocJkyYwFdffcXatWtp2bKlq8NplFROOI/KCsdQOdE0Kfmsp5o3b07z5s2rde6xY8e47LLL6NOnD3PmzMFsVoV2dXl6etKnTx9WrlzJyJEjAaMJaOXKlUyYMMG1wTVQVquV+++/n88//5w1a9bQunVrV4fUaKmccB6VFfalcqJpU/LZwB07dozBgwfTqlUrXn31VU6cOGE7pr/Gq2fSpEmMGTOG+Ph4+vbty4wZM8jLy+P22293dWgN0vjx41mwYAFffPEFAQEBtv5wQUFB+Pj4uDi6pknlhH2orLAflRNNm6ZaauDmzp1bZcGnf9rqe/PNN3nllVdISUmhZ8+ezJw5k379+rk6rAbJZDJVun/OnDnnbSIWx1A5YT8qK+xD5UTTpuRTRERERJxGnX5ERERExGmUfIqIiIiI0yj5FBERERGnUfIpIiIiIk6j5FNEREREnEbJp4iIiIg4jZJPEREREXEaJZ8iIiIi4jRKPqVSY8eOta1ffD5r1qzBZDKRlZXl0JjKDR48mIkTJ9q+j4uLY8aMGXZ/zh/fgz8+15HPEmkIVE6onBCpDa3tLpX617/+Ve1l9wYMGEBycjJBQUHVvv/YsWPJyspiyZIltYzwd5s2bcLPz69a58bFxTFx4sRqfTjU5D2oroMHD9K6dWt++eUXevbs6dBniTiaygmVEyK1oeRTKlWTDwhPT08iIyMdGM25NW/e3K73s1gsmEymGr0HdeXMZ4nYi8oJlRMitaFmd6nUmc07RUVFPPDAA4SHh+Pt7c2gQYPYtGmT7dw/NqfNnTuX4OBgli9fTqdOnfD39+fKK68kOTkZgGeffZZ58+bxxRdfYDKZMJlMrFmzptI48vLyuO222/D39ycqKorXXnvtrHPObE6zWq08++yzxMbG4uXlRXR0NA888ABgNIcdOnSIhx56yPbcM+NdunQpnTt3xsvLi8OHD1faxFVaWsqECRMICgqiWbNmPPXUUxVqIkwm01m1NMHBwcydOxeA1q1bA9CrVy9MJhODBw8+6/2uyXu+cuVK4uPj8fX1ZcCAASQmJlb6Poo4gsoJlRMitaHkU87rscceY9GiRcybN48tW7bQrl07hg0bRkZGRpXX5Ofn8+qrr/Lvf/+btWvXcvjwYR555BEAHnnkEa6//nrbB01ycjIDBgyo9D6PPvooP/zwA1988QXfffcda9asYcuWLVU+d9GiRUyfPp13332XvXv3smTJErp16wbA4sWLadmyJVOnTrU998x4X3rpJd5//31+++03wsPDK73/vHnzcHd3Z+PGjfzrX//i9ddf5/333z/ve1hu48aNAKxYsYLk5GQWL15c6XnVfc+feOIJXnvtNTZv3oy7uzt33HFHtWMRsSeVE79TOSFybmp2l3PKy8vjnXfeYe7cuQwfPhyA2bNn8/333/PBBx/w6KOPVnpdSUkJs2bNom3btgBMmDCBqVOnAuDv74+Pjw9FRUXnbIbLzc3lgw8+4OOPP+byyy8HjEK9ZcuWVV5z+PBhIiMjGTp0KB4eHsTGxtK3b18AQkNDcXNzIyAg4KznlpSU8Pbbb9OjR49zvh8xMTFMnz4dk8lEx44d2b59O9OnT2fcuHHnvK5cedNfWFhYlT97Td7zF154gUsvvRSAyZMnc/XVV1NYWIi3t3e14hGxB5UTFamcEDk31XzKOe3fv5+SkhIGDhxo2+fh4UHfvn3ZtWtXldf5+vraPlAAoqKiSEtLq/Gzi4uL6devn21faGgoHTt2rPKa0aNHU1BQQJs2bRg3bhyff/45paWl532Wp6cn3bt3P+95F110ka0ZDqB///7s3bsXi8Vy3murqybv+ZkxR0VFAdT4fRapK5UTFamcEDk3JZ/iEB4eHhW+N5lMThmlGRMTQ2JiIm+//TY+Pj7cd999XHLJJZSUlJzzOh8fnwofFrVV2c95vmfXxZnvc3n8ZWVlDnueiD2pnPidyglpSpR8yjm1bdsWT09P1q1bZ9tXUlLCpk2b6Ny5c63v6+nped5agLZt2+Lh4cGGDRts+zIzM9mzZ885r/Px8WHEiBHMnDmTNWvWsH79erZv317t557LmbEA/Pzzz7Rv3x43NzfAaC47s4/Y3r17yc/Pt33v6ekJcM4YHPWeiziKyomKVE6InJv6fMo5+fn5ce+99/Loo48SGhpKbGwsL7/8Mvn5+dx55521vm9cXBzLly8nMTGRsLAwgoKCzqoF8ff358477+TRRx8lLCyM8PBwnnjiCczmqv9mmjt3LhaLhX79+uHr68vHH3+Mj48PrVq1sj137dq13HjjjXh5edGsWbMaxX348GEmTZrEPffcw5YtW3jjjTcqjKwdMmQIb775Jv3798disfD4449X+LnCw8Px8fFh2bJltGzZEm9v77OmT3HUey7iKConKlI5IXJuSj7lvF588UXKysq49dZbOXXqFPHx8SxfvpyQkJBa33PcuHGsWbOG+Ph4cnNzWb16tW06kTO98sor5ObmMmLECAICAnj44YfJzs6u8r7BwcG8+OKLTJo0CYvFQrdu3fjyyy8JCwsDYOrUqdxzzz20bduWoqKiGjfx3XbbbRQUFNC3b1/c3Nx48MEHufvuu23HX3vtNW6//XYuvvhioqOj+de//kVCQoLtuLu7OzNnzmTq1Kk8/fTTXHzxxZVOH+OI91zEkVRO/E7lhMi5maxaLkEqcdNNN+Hm5sbHH3/s6lBEpJ5SOSEitaE+n1JBaWkpO3fuZP369XTp0sXV4YhIPaRyQkTqQsmnVLBjxw7i4+Pp0qULf//7310djojUQyonRKQu1OwuIiIiIk6jmk8RERERcRolnyIiIiLiNEo+RURERMRplHyKiIiIiNMo+RQRERERp1HyKSIiIiJOo+RTRERERJxGyaeIiIiIOI2STxERERFxmv8H/BFIKNNyeYMAAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 682.75x300 with 2 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "# First chart: Point range plot for accuracy\n",
        "location_groups = data.groupby('location')\n",
        "mean = location_groups['response'].mean()\n",
        "std_dev = location_groups['response'].std()\n",
        "# Calculate the confidence interval using the standard deviation\n",
        "# For a 95% confidence level, which is common, we use 1.96 times the standard deviation\n",
        "# This assumes the data follows a normal distribution\n",
        "n = location_groups.size()\n",
        "ci_width = 1.96 * (std_dev / np.sqrt(n))\n",
        "cis_lower = mean - ci_width\n",
        "cis_upper = mean + ci_width\n",
        "# Plotting\n",
        "plt.errorbar(mean.index,\n",
        "             mean,\n",
        "             yerr=[mean - cis_lower, cis_upper - mean],\n",
        "             fmt='o',\n",
        "             color='black')\n",
        "plt.xlabel('location')\n",
        "plt.ylabel('Accuracy')\n",
        "plt.title('Probability of choosing the left-hand option')\n",
        "plt.show()\n",
        "# Second chart: Histogram of the product of reaction time (rt) and response\n",
        "data['joint distribution'] = data['rt'] * (2 * data['response'].astype(int) - 1)\n",
        "# Use Seaborn's FacetGrid to create a multi-panel histogram\n",
        "g = sns.FacetGrid(data, col=\"location\", hue=\"location\")\n",
        "g.map(sns.histplot, \"joint distribution\", kde=True, bins=30)\n",
        "g.add_legend()\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# Note: it only work in the hddm 0.8.0\n",
        "\n",
        "# HDDMStimCoding set right as upper boundary as default\n",
        "# Thus we recode it to allow the \"left\" as upper boundary\n",
        "tmp_df = data\n",
        "tmp_df['location'] = tmp_df['location'].replace({\"left\": \"B\", \"right\": \"A\"})\n",
        "\n",
        "m_stim_coding_v = hddm.HDDMStimCoding(\n",
        "    tmp_df,\n",
        "    stim_col='location',\n",
        "    split_param='v',\n",
        "    include=['v', 'a', 't', 'z'],\n",
        ")\n",
        "m_stim_coding_v = m2_stim.sample(2000,\n",
        "                                 burn=1000,\n",
        "                                 chains=4,\n",
        "                                 return_infdata=True,\n",
        "                                 save_name=\"m2_stim\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# using stim coding with HDDMRegressor\n",
        "\n",
        "\n",
        "def v_link_func(x, data=data):\n",
        "  # 1 is left; 0 is right\n",
        "  stim = data.location.loc[x.index]\n",
        "  v_flip = x.where(stim == \"left\", -x)\n",
        "\n",
        "  return v_flip\n",
        "\n",
        "\n",
        "reg = [{\"model\": \"v ~ 1\", \"link_func\": v_link_func}]\n",
        "\n",
        "mreg_stim_coding_v = hddm.HDDMRegressor(\n",
        "    data,\n",
        "    reg,\n",
        "    include=['v', 'a', 't', 'z'],\n",
        ")\n",
        "mreg_stim_coding_v = m3_stim.sample(2000,\n",
        "                                    burn=1000,\n",
        "                                    chains=4,\n",
        "                                    return_infdata=True,\n",
        "                                    save_name=\"m3_stim\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Summary \n",
        "\n",
        "In this article, we delve into the implementation of different coding methods using HDDM, with a particular focus on Stimulus Coding.\n",
        "- We introduce two methods for implementing Stimulus Coding: HDDMStimCoding and HDDMRegressor. We also provide example code to demonstrate how to use these two approaches.\n",
        "- Additionally, we present two examples of Stimulus Coding: using Stimulus Coding to invert the parameter z in a perceptual decision-making task and using it to invert the parameter v in a food choice task.\n",
        "- Lastly, we remind that Stimulus Coding is essentially a particular model, not an encoding method, and it still depends on Accuracy or Choice Coding. The choice of which encoding method or model to use should be based on the specific task and requirements. It is crucial to avoid overuse or misuse, which can lead to unreliable analysis results.\n"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "py39hddm",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.18"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}
